Ruby のブール演算子には見慣れた &&, ||, ! の他に同じ意味で使用できる and, or, not なるものがある。
違いは優先度だけらしい。(and, or, not のほうが低い)
また、and と or は優先度が同じだが、&& は || より優先度が高いらしい。
慣れているということもあって普段使う分には &&, ||, ! を使うつもりなので問題ないのだが、以下のコードを試してみた。
f1 = true
f2 = true
f3 = false
f4 = false
r1 = f1 && f2 || f3 && f4
r2 = f1 and f2 or f3 and f4
puts r1
puts r2
実行してみると、どちらも true と表示された。
あれ?
and と or が優先度が同じということは r2 は false にならないとおかしくないか?
((f1 and f2) or f3) and f4 と同等になるのだと思ったんだが
なので、ためしに
r3 = ((f1 && f2) || f3) && f4
r4 = ((f1 and f2) or f3) and f4
puts r3
puts r4
を追加して実行してみると、r3 は false になり r4 は true になった。
何が起こってるのかさっぱりわからんorz
俺はどこをどう考え違いをしているんだろう?
とりあえず and, or は絶対使わないと心に固く決めた。
# 他にもメソッドの引数に渡すときに、and や or を使ってる場合は do_something((flag1 and flag2)) のように括弧を二重にしなければならないとかめんどくさいし。