スポンサーリンク
returnは要らない
Rubyでは全てのメソッドは戻り値を返す。というか戻り値を返さないメソッドは定義できない。
わざわざreturnせずとも、メソッドの定義式の最後の値が自動的に戻り値として返されるから。
1 2 3 4 5 6 | def plus(i, j) i + j end p plus(2, 3) #=> 5 |
Javaではvoidなやつが結構多いので「関数」という呼び方はしっくりこないが、Rubyのメソッドは全部値を返すので「関数」という呼び方がしっくりくる。
しかし個人的には「メソッド」という呼び方が慣れているので、基本的には「メソッド」でいくので悪しからず。
スポンサーリンク
( )は省略可能
Rubyではメソッドを呼ぶ時、( )を省略することができる。
1 2 3 4 5 6 7 | def plus(i, j) i + j end p plus(2, 3) #=> 5 p plus 2, 3 #=> 5 |
メソッドを定義する時も省略可能。
1 2 3 | def plus i, j i + j end |
引数のdefault値を設定できる
引数のdefault値を設定しておくことができ、メソッドを呼ぶ際に引数を入れなかった場合、そのdefault値が引数として使われる。
1 2 3 4 5 6 7 | def plus(i=0, j=0) i + j end p plus() #=> 0 p plus(3) #=> 3 |
省略できるのは後ろの引数のみ。前の引数を省略して後ろにだけ引数を渡すことはできない。
引数にブロックを受け取ることが出来る
ブロックというのはdo~end(もしくは{ ~ })で囲った処理の塊。
例えばこういうの↓
1 2 3 | do puts "Hello ruby" end |
このブロックを丸ごと引数として関数に渡すことができる。
例えばこんな感じ↓
1 2 3 | [1, 2, 3].each do puts "Hello ruby" end |
配列[1, 2, 3]をレシーバとしたeachメソッドの引数にdo~endを渡している。この場合の出力結果はただ単に配列の要素の数だけ渡したブロックの処理を繰り返すだけ↓
1 2 3 4 | #出力結果 Hello ruby Hello ruby Hello ruby |
配列の要素を受け取りながら処理する場合は、以下のようにブロックの中で| |を使う。
1 2 3 4 5 6 7 8 | [1, 2, 3].each do |i| puts i*10 end #出力結果 10 20 30 |
この辺りはちょっと話がややこしいので、詳しくはRubyのブロック、ブロック引数、Proc、yieldが分かったを参照。
キーワード引数とオプション引数
キーワード引数とオプション引数については別記事にてまとめたので参照されたし。