😽

Ruby の a and return と return and b

2024/01/30に公開

Rails のアプリケーションコードを読んでいると以下のように『 render してすぐにメソッドから抜ける』という意図で and return を使っている事がたまにあります。

def index
  if true
    render plain: "NG" and return
  end
  render plain: "OK"
end

これは『 render を重複して呼ばないイディオム』として知られています。

return and a をするとどうなる?

と、いう感じで a and return はたまに見るコードなのですが return and a はどうでしょうか。
そもそもこれを実行したらどうなるんでしょか。
やってみました。

return and a
__END__
output:
/path/to/test.rb: --> /path/to/test.rb
unexpected void value expression
> 1  return and a
/path/to/test.rb:1: void value expression (SyntaxError)
return and a
^~~~~~

と、言う事で return and a はシンタックスエラーになりました。
演算子の左辺に void を返す式があるとシンタックスエラーになる感じなんですかね?
なので and 以外でも同様の結果になります。

# 以下も同じ様に void value expression (SyntaxError) になる
return < 42
return && 42
GitHubで編集を提案

Discussion