プログラミングの魔物

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

メソッド呼び出しの単純化

リファクタリング 10章

インターフェースをより直接的にするためのリファクタリング

メソッド名の変更

メソッドの名前がその目的を正しく表現できていない → メソッドの名前を変更する

  • メソッドにつけるコメントを考え、それをメソッド名にする
  • 良い名前を思いついたら何度でも変更する
  • 同じ事がシグニチャにも言える。引数の順序を変更することで意味を明らかにできるならそうする

引数の追加

あるメソッドが呼び出し元からより多くの情報を必要としている → その情報を渡すために引数を追加する

  • 足りない情報を見つけたら引数として追加する
  • 追加時には「引数オブジェクトの導入」を検討する

引数の削除

ある引数が、もはやメソッド本体から使われていない → 引数を削除する

問い合わせと更新の分離

1つのメソッドが値を返すと同時にオブジェクトの状態を変更している → 問い合わせ用と更新用の2つのメソッドをそれぞれ作成する

  • 値を返す関数は観測可能な副作用がなければ価値がある。観測可能な副作用とは内部的なキャッシュなどの他にも影響を与えるメソッド
  • 値を返すと同時に副作用も伴うメソッドは分離すべき

メソッドのパラメーター化

複数のメソッドが、異なる値に対してよく似た振る舞いをしている → その異なる値を1つの引数として受け取るメソッドを作成する

  • よく似た振る舞いをするものの内部的な値に依存して異なる複数のメソッドを一元化する

明示的なメソッド群による引数の置き換え

引数の特定の値によって異なるコードが実行されるメソッドがある → 引数の値に対応する別々のメソッドを作成する

  • 「メソッドのパラメーター化」の裏返し
  • 条件に依存する振る舞いを減らす。コンパイル時にチェックされる

オブジェクトそのものの受け渡し

あるオブジェクトから複数の値を取得し、それらの値をメソッド呼び出しの引数として渡している → 代わりにオブジェクトそのものを渡す

  • オブジェクトから得られる情報量を増やすことができる
  • 副作用としてオブジェクトへの依存関係ができる

メソッドによる引数の置き換え

あるオブジェクトがメソッドを呼び出し、その戻り値を別のメソッドの引数として渡している。受信側はそのメソッドを呼出可能である → 引数を削除し、受信側にそのメソッドを呼び出させる

  • 引数で与えられる情報を別の方法で取得できるならそうする

引数オブジェクトの導入

本来まとめて扱うべき一連の引数がある → それらをオブジェクトに置き換える

  • いつも一緒に渡される引数グループはオブジェクト化を検討する

setメソッドの削除

フィールドの値が生成時に設定され、決して変更されない → そのフィールドに対するすべてのsetメソッドを削除する

  • 外から変更されない場合は必要ない

メソッドの隠蔽

メソッドが自分の定義されているクラス以外から全く使用されていない → そのメソッドを非公開にする

  • リファクタリングによりメソッドの可視性に関する決定が変わることがある
  • 定期的にチェックして公開する必要のないメソッドはプライベートにする

FactoryMethodによるコンストラクタの置き換え

オブジェクトを生成する前に、単純な生成以上のことをしたい → ファクトリメソッドを使ってコンストラクタを置き換える

  • 最もわかりやすい動機はタイプコードを置き換えたい場合
  • コンストラクタが制約されているような場合にも利用できる

ダウンキャストのカプセル化

メソッドが返すオブジェクトが、呼び出し側によってダウンキャストされる必要がある → そのダウンキャストをメソッド内に移動する

  • ダウンキャストを隠す

例外によるエラーコードの置き換え

メソッドがエラーを示す特別なコードをリターンしている → 代わりに例外を発生させる

  • エラーが発生した時に呼び出し元で処理する場合は例外を使う

条件判定による例外の置き換え

例外を発生させているが、本来は呼び出し側が先にチェックすべきである → 最初に条件判定をするように呼び出し側を修正する

  • 例外の使いすぎにより、本来条件で処理する部分まで例外を使用しているならそれを改善する

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

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

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

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