演算子 && と and の使い分け

Ruby における演算子 &&and は同じ意味を持ちますが優先度が異なります。(Perlについても同様) これによって使うべきシーンがそれぞれ異なりますので、ここにはその辺りの使い分けについて書いておきます。

 

定義

定義は && も and も「左辺を評価し、真である場合右辺も評価する」というものです。

文法:
  • 式 `&&' 式
  • 式 `and' 式

 

しかし、優先度は && が and よりも高いです。

よって、下記のようなシーンで and を使用することはあまりおすすめできません。

return if a and b

なぜならば、and は優先度が低い演算子であるため例えば if の条件式が長くなってきた時に説明変数をおく場合、

target_condition = a and b

などとしてしまうと、おそらく作者が予期したとおりの値が変数に代入されないためです。 target_condition には b の値には一切依らず、

  • a が true の場合 true
  • a が false の場合 false

が代入されます。

これは and よりも = 演算子の優先度が高いことが理由です。 詳しい挙動は下記を参考にしてください。

[18] pry(main)> a = true and false
=> false
[19] pry(main)> a
=> true
[20] pry(main)> b = (true and false)
=> false
[21] pry(main)> b
=> false
[22] pry(main)> c = true && false
=> false
[23] pry(main)> c
=> false

 

参考