質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

485閲覧

Rails オプション引数とキーワード引数の違い、優先順位

taktokyo1

総合スコア25

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/06/04 10:24

前提・実現したいこと

①②の2点をお伺いさせてください。
Rails Tutorialにて、下記の通りオプション引数とキーワード引数の実装方法の違いについて言及されている部分があるのですが、①両者の挙動にはどのような違いがあるのでしょうか。
キーワード引数の方が記述がシンプルで良いなと思う一方、Tutorialではオプション引数が先に紹介されているので、②オプション引数を用いることが開発現場のスタンダードなのかなとも思っているのですが、いかがでしょうか。

Rails Tutorial引用

オプション引数は今でもRubyコミュニティで一般的に使われていますが、Ruby 2.0から導入された新機能「キーワード引数 (Keyword Arguments)」でも実現することができます。先ほど変更したリスト 7.12を、リスト 7.13のように置き換えてもうまく動くことを確認してみましょう。この2つの実装方法はどういった違いがあるのでしょうか? 考えてみてください。 リスト 7.12: gravatar_forヘルパーにオプション引数を追加する app/helpers/users_helper.rb module UsersHelper # 引数で与えられたユーザーのGravatar画像を返す def gravatar_for(user, options = { size: 80 }) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) size = options[:size] gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" image_tag(gravatar_url, alt: user.name, class: "gravatar") end end リスト 7.13: gravatar_forヘルパーにキーワード引数を追加する app/helpers/users_helper.rb module UsersHelper # 引数で与えられたユーザーのGravatar画像を返す def gravatar_for(user, size: 80) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" image_tag(gravatar_url, alt: user.name, class: "gravatar") end end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一つには、ハッシュで受ける方法が昔からあるのに比べ、キーワード引数の構文は2.0以降なので、すでに前者の方法で書かれたプログラムはそのままということがあるでしょう。

また、キーワード引数の構文のデメリットは、
・キーワードを書かないといけない
・キーワードを決めておかないといけない
・省略可能な引数はデフォルト値を指定しないといけない
です。他にもあるかも知れません。

1つめは、

Ruby

1def foo(x={}) 2 bar(SOMETHING, x) 3end 4 5foo(a: 1, b: 2)

のように、キーワード引数をそのまま(あるいはキーと値を追加して)別のメソッドに渡すときに、fooをキーワード引数の構文で書くのは面倒ですし、barのキーワード引数に追加があった場合に、fooまで直さないといけない。

2つめは、あらかじめ引き数名を決めず、引数に指定された引き数名(キー)を見て動的に何かを定義したりするケース等です。

3つめは、ハッシュで受ける方法だと、「引数を省略した」のと「引数にたまたまデフォルト値と同じ値を指定した」のとを区別できます。意味があるかどうかは別として。

メリットは、お書きのようにストレートに書けることです。

投稿2019/06/04 13:09

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taktokyo1

2019/06/05 18:03

早速に有難う御座いました!詳細なご説明大変助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問