概要
Ruby2.0.0から追加されていた、関数のキーワード引数についての備忘録。Rubyのキーワード引数は、関数の引数にて、ハッシュ風のデフォルト値を設定し、呼び出す側ではそれを任意に上書きして呼び出すことができる。長らくRubyを使ってるのにRubyにキーワード引数があることを今まで知らなかった。
ちなみにRubyのキーワード引数は、2.0.0からの新機能なのので、1.x系を使ってる人はハッシュで代用するか2系にあげましょう。
前提
以下環境で動作確認済み
debian | 8.6 |
ruby | 2.2.2 |
例1 キーワード引数が1つ
say関数の引数textは、デフォルトで’World’が適用されているが、呼び出し側でハッシュっぽくtextを指定することでデフォルト値を上書きすることができる。
def say(text: 'World') puts "Hello #{text}" end say # Hello World say() # Hello World say(text: 'Ruby') # Hello Ruby
以下のように、上記コードをデフォルト引数で書き直すこともできるが、キーワード引数だと、呼び出し側でもtextとラベルを指定する必要があるので、引数の役割を明示することができる。
l returned 1 def say(text = 'world') puts "Hello #{text}" end say # Hello World say() # Hello World say('Ruby') # Hello Ruby
例2 キーワードが2つ以上
今度は、例1では固定だったHelloの部分もキーワード引数で書き換えられるようにする。下記コードのように、キーワード引数を用いることで、任意の引数に対して値を指定することができる。
def say(first_text: 'Hello', last_text: 'World') puts "#{first_text} #{last_text}" end say # Hello World say() # Hello World say(first_text: 'こんにちは') # こんにちは World say(last_text: 'Ruby') # Hello Ruby say(first_text: 'こんにちは', last_text: 'Ruby') # こんにちは Ruby
もっと知りたい
以下記事を見るとキーワード引数の他にも、引数受け渡し全般についてかなり詳しくなれる
Rubyのメソッドの引数受け渡しまとめ