🐈

[Rails]unless ~ else ~ end はリファクタしましょう

2022/10/24に公開

初めに

以前unlessはできるだけ使わず、ifを使おうという趣旨の記事を書きました。
https://zenn.dev/aytsk_meow/articles/dc77c3257ea450
上記の記事では取り上げませんでしたが、unless ~ else ~ endという書き方も微妙です。
そして、こちらは簡単にリファクタができるのでチャチャっと直してしまいましょう。
(我が物顔で書いてますが、先輩に教えていただいたことのアウトプットです)


本題

リファクタ前のコード

unless users.count > books.count
  # 処理A
else
  # 処理B
end

日本語訳すると
「ユーザー数が本の数より多くないときは処理Aをして、そうでないとき、つまり、ユーザー数が本の数より多くない ことはない ときに処理Bをする」になります。
もう少しわかりやすくすると
「ユーザー数が本の数より多くないときは処理Aをして、そうでないとき、つまり、ユーザー数が本の数より多いときに処理Bをする」になります。
二重否定は肯定になるわけですが、コードを読む度にこの変換を脳内で行う必要が生じてしまいます。
つまり、このコードは可読性の低いコードです。
というわけで、リファクタしましょう。

リファクタ後のコード

if users.count > books.count
  # 処理B
else
  # 処理A
end

日本語訳すると
「ユーザー数が本の数より多いときは処理Bをして、そうでないとき、つまり、ユーザー数が本の数より多くないときは処理Aをする」になります。
こうなると理解しやすく、可読性の高いコードとなりますね。

簡単にまとめると

  • unlessは極力使わない
  • unless A else B endif B else A end に書き換える。

以上〜

Discussion