Techioz Blog

if/else をよりクリーンに条件文を書く方法はありますか

概要

もっとDRYにしたいというif-elseステートメントがあります。

if flag?
  box? && ball?
else
  box?
end

そしておそらく次のような別のステートメントがあるかもしれません

if flag?
  box? && ball? 
else
  box? && ball? && bat? 
end

それらの状態をきれいにして、よりドライに見えるようにするにはどうすればよいでしょうか?

解決策

このような条件を単純化するには、条件を冗長に記述し、ド モルガンの法則に従って段階的に変換すると役立つ場合があります。

if flag?
  box? && ball?
else
  box?
end

次のように書くことができます

(flag? && box? && ball?) || (!flag? && box?)

箱だから?どちらの場合も true である必要があるため、他の条件の前に最初に確認できます。

box? && ((flag? && ball?) || (!flag?))

に変換できるのは

box? && (!flag? || ball?)

他の式は、同じ手順に従って変換できます。

if flag?
  box? && ball? 
else
  box? && ball? && bat? 
end 

詳細な条件として記述する

(flag? && box? && ball?) || (!flag? && box? && ball? && bat?)

そして変身する

(box? && ball?) && ((flag?) || (!flag? && bat?))

で終わる

box? && ball? && (flag? || bat?)