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で書いた後に論理を反対にしましょう。
参考