`&& return` より `and return` を好むべき理由

かつての RuboCop は condition and return というコードに対して、condition && return にするようデフォルトでサジェスチョンしていた。

このサジェスチョンはおかしく見えたので、結構前に構成を変えてデフォルトで condition and return を受け入れるようにしている。

このあたり Ruby での演算子の結合順位をおさらいすると、以下のとおり。

  1. &&
  2. ||
  3. and, or

docs.ruby-lang.org

サジェスチョンされるがまま演算子を変えると、結果が変わるサンプルです。

% ruby -e 'p false || true and return' # p(false || true) and return と等価
true

% ruby -e 'p false || true && return' # p(false || (true && return)) と等価
# noop

このように結合順位の関係から、条件式と制御フローをつなげる時は && より and を一貫して使う方が原則好ましいと思っています。

参考までに上述している RuboCop Rails の PR にも書いていますが、RailsDoubleRenderError が起きた時のメッセージで示されるのは render :action and return です。

github.com

auto-correct されたから常に正しいわけではないので、おかしいと思うケースと遭遇したときは立ち止まってもう一度レビューしてみましょう。

あとこういったおかしいところを地道になおして行っていたりもしているので、RuboCop のバージョンが古い場合はアップデートしてみてください。