プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

条件記述の単純化

リファクタリング 9章

条件ロジックは分かりにくくなる宿命にあり、それを単純化するリファクタリングが多数存在する。

条件記述の分解

複雑な条件記述がある → その条件記述部とthen部およびelse部から、メソッドを抽出する

  • 条件の中の式あるいはコードブロックをメソッド化し明確化する
  • 分岐の理由をハッキリさせる

条件記述の統合

同じ結果を持つ一連の条件判定がある → それらを1つの条件記述にまとめてから抽出する

  • 複数の条件の結果が同一の処理になる場合に、条件をorでつなげたりメソッド化したりすることで統合する
  • 条件判定が本当に独立していて意図がある場合は統合する必要はない

重複した条件記述の断片の統合

条件式のすべての分岐に同じコードが存在する → それを式の外側に移動する

  • 各分岐の内部のコードに重複している部分があれば、それを前部または後部に寄せムダを省く
  • コードがメソッド化出来れば「メソッドの抽出」をする

制御フラグの削除

一連の論理型の式に対して制御フラグとして機能する1つの変数がある → 代わりにbreakかreturnを使う

  • 制御フラグは大抵break,continueで除去できるので無くす
  • breakやcontinueがない言語ではメソッド化してreturnを使う

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

メソッドに正常ルートが不明確な条件付き振る舞いがある → 特殊ケースすべてに対してガード節を使う

  • 条件は次の2つの形式に分類される。1つはいずれも正常、もう1つは片方が正常でもう片方が特殊条件
  • 両方が正常ならif-then-else
  • 特殊条件は条件が真ならリターン(ガード節)
  • 入れ子になって読みにくくなった条件記述を、特殊条件としてreturnするガード節に置き換えることで可読性を高める

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

オブジェクトのタイプによって異なる振る舞いを選択する条件記述がある → 条件記述の各アクション部をサブクラスのオーバライドメソッドに移動する。元のメソッドはabstractにする

ヌルオブジェクトの導入

null値のチェックが繰り返し現れる → そのnull値をヌルオブジェクトで置き換える

  • オブジェクトがヌルかどうかを判定して処理を分ける→条件式が増える
  • ヌルオブジェクトを導入する→正解

表明の導入

コードのある部分が、そのプログラムの状態について何らかの仮定を持っている → その仮定を、表明を使って明示する

  • 前提条件があるならassertする
  • 偽になったらプログラマのエラー。通常、本番コードでは取り除かれる(ライブラリ等は別)

この記事で読み進めている本

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

  • 作者: マーチンファウラー,Martin Fowler,児玉公信,平澤章,友野晶夫,梅沢真史
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/05
  • メディア: 単行本
  • 購入: 94人 クリック: 3,091回
  • この商品を含むブログ (295件) を見る