Ruby 2.0.0リリース! – キーワード引数を使ってみよう

Ruby2.0の重要機能の一つ、キーワード引数を使ってみましょう。 基本的なキーワード引数の使い方 最も基本的な使い方は、以下のようなものです。 def test1(name: ‘unknown’, age: 0) puts “name=#{name}, age=#{age}” end > test1() name=unknown, age=0 > test1(name: ‘yamada’, age: 20) name=yamada, age=20 可変長引数とデフォルト引数とキーワード引数を組み合わせる 通常の引数やデフォルト引数、可変長引数と組み合わせてみましょう。「通常の引数→デフォルト引数→可変長引数(*)→キーワード引数」の順にする必要があります。 def test2(id, type=’normal’, *friends, name: ‘unknown’, age: 0) puts “name=#{name}, age=#{age}, type=#{type}” puts “id=#{id} friends=#{friends}” end > test2(100) name=unknown, age=0, type=normal id=100 friends=[] > test2(100, ‘special’, 2, 3, name: ‘sato’, age: 30) name=sato, age=30, type=speial id=100 friends=[2, 3] > test2(100, ‘special’, 2, 3, gender: ‘male’, name: ‘sato’, age: 30) unknown keyword: gender (ArgumentError) キーワード引数とオプション引数を組み合わせる さらにオプションと組み合わせてみましょう。キーワード引数に一致しない名前を渡したときに、アスタリスク2つ「**」をつけた引数で受け取れます。 def test3(id, type=’normal’, *friends, name: ‘unknown’, age: 0, **opts) puts “name=#{name}, age=#{age}, type=#{type}” puts “id=#{id} friends=#{friends} opts=#{opts}” end > test3(100, hobby: ‘tennis’) name=unknown, age=0, type=normal id=100 friends=[] opts={:hobby=>”tennis”} > test3(100, ‘special’, 1, 2, gender: ‘male’, name: ‘sato’, age: 30, hobby: ‘tennis’ ) name=sato, age=30, type=special id=100 friends=[1, 2] opts={:gender=>”male”, :hobby=>”tennis”} # 中括弧で囲むと可変長引数の1要素にHashを渡したことになり、意味が変わるので注意 > test3(100, ‘special’, 1, 2, { gender: ‘male’, name: ‘sato’ }, age: 30, hobby: ‘tennis’ ) name=unknown, age=30, type=special id=100 friends=[1, 2, {:gender=>”male”, :name=>”sato”}] opts={:hobby=>”tennis”} まとめ 引数の定義は、「通常の引数→デフォルト値つき引数→可変長引数→キーワード引数→オプションハッシュ→ブロック引数」の順で行う必要があります。 この順番を守れば、すべてを混在させることができます。 ただ、現実にはデフォルト引数とキーワード引数を混在させる意味はあまりないですね。 関連記事 Ruby 2.1.0リリース!注目の新機能を見てみましょう