【Ruby】andと&&ってなにか違いあるの?

andと&&って特に挙動に違いはなく、

「個人の好みによってどっち使ってくれても大丈夫ですよ〜」

f:id:haru89:20200405142808j:plain:w200

って感じだと思ってた、、、けど違った!

例えば

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や&&を使う!

参考

https://qiita.com/riku-shiru/items/533a01bdf18e2e3eef46