LoginSignup
5
0

More than 1 year has passed since last update.

【Ruby】andと&&は優先度の影響で振る舞いが変わる

Last updated at Posted at 2022-12-24

例として以下のような test.rb を作成する

test.rb
def hoge(val)
  p val and return
  p "end of hoge"
end

def fuga(val)
  p val && return
  p "end of fuga"
end

hoge("hoge")
fuga("fuga")

期待される出力として

hoge
fuga

が出てきてほしい

しかし実行結果は

$ ruby test.rb 
"hoge"
$

という出力になる

このような出力になる原理として、
and は && に比べて優先順位の低い演算子 と説明がある

左辺を評価し、結果が偽であった場合はその値(つまり nil か false) を返します。左辺の評価結果が真であった場合には 右辺を評価しその結果を返します。 and は同じ働きをする優先順位の低い演算子です。 - 演算子式 (Ruby 3.1) - and

そのため、メソッド呼び出しの括弧を省略すると解釈が変わってしまう

p val and return
# 以下と同義
p (val) and return
p val && return
# 以下と同義
p (val && return)

そのため、後者はval && returnが実行されるので、右式のreturnが評価され、pが実行される前に終了する

参考

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0