unlessで結合した論理式を重ねていかない方法

hoge unless ~

ここの~でよく追加して条件を埋めていました。

自分がやっている場合は、いいのですが、何が困ったかというと、自分で振り返ってみたら分からなくなってしまします。

~でない限りという否定の条件なので、これが深くなっていくと、ぱっと見で理解できなくなってしまいます。

styleguide/ruby.ja.md at master · cookpad/styleguide · GitHub

天下のcookpadもやめたほうがいいって警告しています。

[SHOULD] unless および until の条件式に複数の項を || で結合した論理式 (加法標準形) を書いてはならない。

よっしゃ動いた!から、これって分かりづらくない?って意識を書いていかねば、こういうのを書いてしまいます。

対応策

では、どのように書いていくかというお話です。

仮に下記のコードがあったとします。

@user.update(user_params) unless @user.name.blank? || @user.email.blank?

name or emailが存在しない限りとなって、わかりにくいですね。

if文に直して、論理を反対にします

@user.update(user_params) if !@user.name.blank? && !@user.email.blank?

まとめ

unlessで複雑な条件は使わないようにする。

もし、使うようであれば、unlessで書いた後に論理を反対にしましょう。

参考

qiita.com