SakuraWi - BLog

WEBエンジニア。聴いたお話をまとめておく倉庫的な。スタックストックスタック!

【Ruby】false || nilの返り値は?何が返るのかをちゃんと考えてみた


どうも、櫻井広大です。

今日は、Rubyの言語の仕様についての記事になります。

  • 論理和の仕組みを知って返り値を考えてみる false || nilで何が返ってくるか考えてみよう。

ちなみに答えから言うと、これはnilが返ります。

irb(main):001:0> false || nil
=> nil

僕は勝手にfalseが返るものだと認識していました。

falseが返るのではないか、というイメージがあった原因は、trueかfalseのどちらかが返るという思い込みでした。

式の評価、ということでtruefalse が返るんじゃないの〜って思ってる人、僕と同じです。危険です。

でもよく考えてみると、 @user = default_number || nilとかでデフォルト値があったらデフォルト値が代入されて、なかったら nil ですよ、とかこの記述を考えるとtrueなどではないんですよね。

※ちなみにこれは、@user ||= default_numberのメモ化と同様のふるまいですね。

  • いわゆる論理和の仕組みを考えてみた

会社の先輩から、「if文で表すとしたらどうなると思う?」と言われて考えてみました。

自分の頭のフローはこんな感じ。

A || B とするとAとBは値のイメージ。

return true if A.true?

return true if B.true?

return B

trueがあったらそれを返して、どれもひっかからないのであれば、Bが返るのかな。

return true if A.true?

return B if B.true?

return B

んん、というかtrueが返るのじゃなくて、Bjじゃん。

return true if A.true?

return B

となると、return Bとかけるな。

return A if A.true?

return B

あれ、Aもtrueが返るのではなくて、Aが返るんだった。

て、ところまでたどり着きました。

  • 論理和は擬似的なif文であわらすことができる。

If (Not 左辺) { 右辺 }

なるほど。。。

左辺を評価してfalseが返らなければそのまま評価され、そうじゃなければ右辺のものが実行(評価される、という理解です。

if文 - Wikipedia