第10章 条件記述の単純化

条件記述の分解

大きなブロックのコードに対しては常に、コードを分解し、それぞれを意図に沿って名前をつけた関数呼び出しにすることで、意図を明確にできる
条件記述の場合、条件判定と条件ごとの処理に対して行うのがおすすめ

手順

条件記述の統合

それぞれの条件が異なるが、結果が同じ場合and,orを使って単一の結果を返す条件判定に統合する

手順

ガード節による入子の条件式の置き換え

どちらか一方の動作が例外的な動作の場合、ガード節を使う

手順

ポリモーフィズムによる条件記述の置き換え

それぞれの型に対して異なるロジックの処理をさせる場合、ポリモーフィズムを利用して型固有の振る舞いをさせる
バリデーションを持つ、基本ケースの場合ロジックをスーパークラスに記述する

手順

特殊ケースの導入

特殊ケースとして共通な振る舞いを備えた、オブジェクトなりクラスを作る
典型的なのが、null

手順

アサーションの導入

前提をアサーションで記述することで、コメントより明確になる
アサーションは常に真であることを前提とした条件分

手順

感想

条件記述の統合では、よくベイチ図を使うことが多い
(数少ない高校で習って実務で使っているやつ)

特殊ケースの導入で嬉しいことis何
少なくとも自分では使うどころが思いつかなかった

アサーションについて、確かに便利そうだけどテストじゃいかんのかって感じ
rubyで組み込むならこう?

def assert(expression)
  raise AssertError unless expression
end

def division(a, b)
  assert(b != 0)
  a / b
end