【Ruby】andと&&ってなにか違いあるの?
andと&&って特に挙動に違いはなく、
「個人の好みによってどっち使ってくれても大丈夫ですよ〜」
って感じだと思ってた、、、けど違った!
例えば
a = true && false p a # => false
b = true and false p b # => true
どちらもfalseになると思ってたけど、そうじゃなかった!
なぜなのか?
andと&&は優先順位が違う
優先順位をみてみると、、、
(優先順位:高) ! ~ ** * / % + - << >> & | ^ > >= < <= == != && || .. ... ?: = not and or (優先順位:低)
andは優先順位がかなり低い
さっきの例をもう一度みてみる
a = true && false
の場合は、最初に
true && false
が実行され、その結果がaに代入されるので、false
b = true and false
の場合は、最初に
b = true
が実行され、その後
and false
が実行されるので、trueになっていた!
ちなみにこんな感じでカッコ()で囲むと、、、
c = (true and false)
true and false
が先に実行されるのでfalseになる。
c = (true and false) p c # => false
まとめ
優先順位の違いを意識してandや&&を使う!