ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  396  : 記事  0  : コメント  1030  : トラックバック  66

ニュース

さて、今年の秋は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

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)) のように括弧を二重にしなければならないとかめんどくさいし。
投稿日時 : 2008年1月29日 2:13

コメント

# re: Ruby の論理演算子 2008/01/29 11:57 DELI
これを実行してみれば何が起こっているか分かると思います。
puts f1
puts f1 and f3

で、演算子の優先順位をよーく見てみましょう。

-----------------------------------
高い ::
[...略...]
||
.. ...
?:(条件演算子)
=(+=, -= ... )
not
低い and or
-----------------------------------

「andとorとnotの優先順位低すぎじゃね?」という突っ込みは無しで。仕様です。

# re: Ruby の論理演算子 2008/01/29 11:58 DELI
あ、すみません。インデントがずれました。orz

# re: Ruby の論理演算子 2008/01/29 13:53 THREE-ONE
ああっ!!優先度が = より低いって事ですね and と or は。
ってことは
r2 = (f1 and f2 or f3 and f4)にしとけばやりたいテストができたってことかな?
残念ながら今は環境がありませんが、帰宅したら試してみます。
メソッドに渡すときにも () が必要なのは、「引数に代入」という処理より優先させるために必要ということか。

DELI さんありがとうございました。


# Ruby の論理演算子 その2 2008/01/29 23:55 へぼろっぱぁ
Ruby の論理演算子 その2

Post Feedback

タイトル
名前
Url:
コメント: