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?)