Ruby on Rails 入門のための知識 2(メソッドと引数)
メソッドに対して渡せる引数について復習してみる。
まずは基本的な形で引数1つ。
def foo(a) puts a end foo("今日は大晦日") #=>今日は大晦日
特に問題なしですね。
fooメソッドの中身は今回は重要ではないため単純です。
Geekな皆様には楽しくない例題になるかもしれません。
引数は1つだけでなく2つでも渡せます。またデフォルト値を設定することもできます。
def foo(a, b=1) a + b end foo(1) # => 2 foo(2,3) # => 5 foo(1,2,3) # => argument Error
引数を任意の個数で設定したい場合はメソッド引数の1つに*を入れましょう。
可変長引数(rest引数)と呼びます。
def foo (a, *rest) rest.each do |i| puts a + i end end foo(1,2) # =>3 foo(1,2,3) # => 3 4
fooメソッドが簡単な内容のためこれも問題ないと思います。
最後にハッシュを引数として渡す場合ですが、そもそもハッシュを引数として渡す理由を考えてみます。
すぐに思いつくものの1つに、
「引数が多くなればなるほどその順番を覚えるのが困難になる」
という問題がありますよね。
それを解決するためにハッシュを渡してあげます。
(他の言語では名前付き引数という呼び方でメソッド呼び出し構文があるようです。)
コードで例を示します。
def foo (args) a = args[:a] || 0 b = args[:b] || 0 c = args[:c] || 0 return a + b + c end foo({:a => 1 , :b => 2, :c => 3}) # => 6 foo({:b => 1 , :a=> 2, :c => 3}) #Hashのため順序は問わない foo({:a => 1}) # => 1 #ハッシュは通常{}内に記述するルールですがハッシュが #メソッドの最後の引数ならば{}は省略できます。 foo(:a =>1, :b =>1) # => 2 #もちろんfoo()のかっこも省略可能です。 foo :a => 1, :b =>1 #Ruby1.9で使える構文もやってみましょう。 foo a:1 , b:1
少しわかりにくいのが論理演算の部分ですね。
a = args[:a] || 0
Rubyではまず、左側から評価されfalseかnilの場合に初めて右側が評価されます。
つまり引数が与えられない場合はnilなので初期値として0が代入されるわけです。
ハッシュが渡せるならブロックも渡せるんじゃないの?と考えた方は勘がいいですね。
「Rubyのyiledが難しい」をご覧ください。
これをどんどん進めていくとprocやらメタプログラミングやらに到達するようですが、このブログの対象外項目ですし(自分がわからないだけですが)とりあえずは、メソッドの項目はここまでにして私の学習後、改めて続きを投稿したいと思います。