質問: 正解のコード ``` def shipping_free?(price) return price >= 5000 end puts shipping_free?(3000) #=>false ``` 不正解のコード ``` def shipping_free?(price) price >= 5000 end puts shipping_free?(3000) #=>false ``` 不正解のコードでは、returnがないのに、答えにfalseが返ってきました。 真偽値を返すメゾットでなぜreturnがいるのですか? また、returnがなくても答えが正しくなった理由も教えて欲しいです。 puts price >= 5000でもfalseが返ってきました。
回答: 問題がわからないのでなぜ下の方が不正解になっているのかわかりませんが、 Rubyのメソッドは**最後に評価された値がreturnされます。** なので > > 不正解のコードでは、returnがないのに、答えにfalseが返ってきました。 > > > これは`price >= 5000`がfalseなのでfalseが返ったということです。 > > 真偽値を返すメゾットでなぜreturnがいるのですか? > > > 真偽値に限らず値を返すメソッドでは原則returnが必要なのですが、 Rubyでは上の理由からreturnあるなしに関わらず何かしら値がreturnされます。 > > また、returnがなくても答えが正しくなった理由も教えて欲しいです。 > > > 最初の理由のとおりです。 > > puts price >= 5000でもfalseが返ってきました。 > > > 関数の最後を`puts price >= 5000`としたという意味であれば `false`が返ってきたのではなく、関数内で`false`の表示が行われただけです。 `puts`はnilを返すので、呼び出し元の`puts shipping_free?(3000)`の表示は nilなので何も表示されていないという感じになっています。