メソッドの戻り値
Rubyでは、returnが書かれていないとき最後に実行した文の値が戻り値になります。
def method "hello" if false end p method #=> nil
上で、表示されるのがfalseではなくnilなのは、ifの条件式が成り立っていないときのif文の値はnilだから、と理解しました。最後に評価した式の値が戻り値なのではなく、最後に実行した文の値が戻り値と理解しました。仕様書がないので確かめることはできませんけれど。
ちなみに↓はPerlの場合。
sub method { "hello" if 0 } print method #=> 0
追記:
smegheadさんから「else節の値がnilだからと考えると、しっくりくるような気がします」とコメントいただきましたが、たとえばelseがない「while」を考えるとどうでしょう。この場合も「while文全体の値がnilになった」と考えたほうがよいような気がします。
def method "hello" while false end p method #=> nil
追記:
id:k3cさんから反応あり。
Rubyの文って値を持つんですよ、確か。だから以下のように、if文の値を「代入」できる。
a = if true "Hello" end p a #=> "Hello"
追記:
masa_edwさんから、リファレンスマニュアルに書いてありますよとご指摘をうけました。そうですね。ごめんなさい。確かめるのさぼってました。