どうも、櫻井広大です。
今日は、Rubyの言語の仕様についての記事になります。
- 論理和の仕組みを知って返り値を考えてみる
false || nil
で何が返ってくるか考えてみよう。
ちなみに答えから言うと、これはnil
が返ります。
irb(main):001:0> false || nil => nil
僕は勝手にfalse
が返るものだと認識していました。
false
が返るのではないか、というイメージがあった原因は、trueかfalseのどちらかが返るという思い込みでした。
式の評価、ということでtrue
か false
が返るんじゃないの〜って思ってる人、僕と同じです。危険です。
でもよく考えてみると、 @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が返らなければそのまま評価され、そうじゃなければ右辺のものが実行(評価される、という理解です。