【Ruby】メソッドの引数の種類について
はじめに
Rubyのメソッドの引数の種類について、学んだことをまとめたいと思います。ruby2.5
今回取り上げる引数
デフォルト引数
=
を使って、引数にデフォルト値を設定できます。
引数なしでメソッドが呼び出された場合、デフォルト引数が渡されます。
def hoge(arg='hoge') p arg end
hoge #=> "hoge" hoge("bar") #=> "bar"
キーワード引数
ハッシュ形式で引数を設定できます。 メソッド呼び出し時はシンボル: 値の形式で引数を指定します。 引数の役割が明確になり、複数の引数を使うときに便利です。
def hoge(msg: 'hello', name: 'Sato') p "#{ msg }, #{ name }" end
hoge(msg: 'hi', name: 'Yamada') #=> "hi, Yamada"
ハッシュなので順番は気にしなくて良い。
hoge(name: 'Yamada', msg: 'hi') #=> "hi, Yamada"
定義されていないキーは使えません。
hoge(age: 28) #=> ArgumentError (unknown keyword: age)
引数を省略するとデフォルトの値が返ります。
hoge #=> "hello, Sato" hoge(name: 'Tanaka') #=> "hello, Tanaka"
定義時にデフォルト値を指定していなければ、引数を省略するとエラーになります。
def hoge(msg: 'hello', name: ) p "#{ msg }, #{ name }" end
hoge #=> ArgumentError (missing keyword: name) hoge(name: 'Tanaka') #=> "hello, Tanaka"
可変長引数
*
をつけて、複数個の引数を設定できます。引数は配列で受け取られます
def hoge(*arg) p arg end
hoge #=> [] hoge('a') #=> ["a"] hoge('a', 'b', 'c') #=> ["a", "b", "c"]
オプション引数
**
をつけて、複数個の引数を設定できます。引数はハッシュで受け取られます。
def hoge(**arg) p arg end
hoge #=> {} hoge(a: 'foo') #=> {:a=>"foo"} hoge(a: 'foo', b: 'bar', c: 'baz') #=> {:a=>"foo", :b=>"bar", :c=>"baz"}
ブロック引数
&
をつけることで、ブロックを引数として受け取ることができます。
メソッド内でcall
で処理を呼び出します。
def hoge(&arg) arg.call end
hoge { 1 + 2 } #=> 3 hoge do ['foo', 'bar', 'baz'].join(',') end #=> "foo,bar,baz"
下記のようにyield
で書くこともできます。こちらのほうがよく使われるようです。
def hoge yield end
hoge { 1 + 2 } #=> 3 hoge do ['foo', 'bar', 'baz'].join(',') end #=> "foo,bar,baz"
使い方、結果は&
と同じです。
参考ページ
https://qiita.com/rtoya/items/33617078501776fdcad7