if/unless 修飾子の使い所

if/unless 修飾子って、break とか next 以外の一般の文では使わないようにしようと、時々思う。でも、つい使っちゃうんだけど。

なんで使わない方が良いと思うかというと、「ふん、ふん」と読んで右を見て、if とか書いてあると、「なんだ。めったに実行しないのか」と思ったりするのが理由。構文ハイライトのあるエディタを使っていれば、ifやunlessが目立つので良いかとも思うけど、エディタ依存のスタイルというのもなんだかな。それから、時間の順序が逆。こっちのほうが大きいか。

next if とかはそれでイディオムに見えるので使っても良いかなと思う。
あと、

File.delete(file_name) if File.exist?(file_name)

とかはいいかな。あくまで、実行部分と条件部分のバランスの問題。


一般の文の場合、例えば、

# (1)
url = a["href"] if a.text == "次を表示"

と、

# (2)
if a.text == "次を表示" then url = a["href"] end

と、

# (3)
if a.text == "次を表示"
  url = a["href"]
end

と、どれが良いか。やっぱり、(1) は良くないよね。(2)のスタイルは避けられることが多いと思うけど、(3)の かさばり感 がいやだな。
あ、意外と、

# (4)
a.text == "次を表示" and url = a["href"]

がしっくり来るかも。少なくとも、シェルスクリプトだとこのスタイルだな。