読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

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

メソッドの構成

リファクタリング 6章

5章は6章以降にあるリファクタリングカタログの導入部なのでノートを取らず読むだけ。

メソッドの抽出

ひとまとめにできるコードの断片に、その目的を表すような名前をつける

  • うまく命名されたメソッドは再利用しやすくなる
  • 上位のメソッドが読みやすくなる
  • メソッドの抽出を行うことで行数は増えるが、抽出元のメソッドを短くし、コメントを除去できる
  • 小さなメソッドは良い名前が付けられなければ無効。抽出することで明快さが向上するならそうする

メソッドのインライン化

メソッドの本体が名前をつけて呼ぶまでもなく単純明快 → メソッド本体をコール元にインライン化してメソッドを除去する。

  • メソッドの中身が単純で、敢えて分ける必要性を感じなければインライン化する
  • メソッドの整理の前段階として、まとめ直すために使われることもある。(「メソッドオブジェクトによるメソッドの置き換え」の前など)
  • 間接化しすぎた場合に無用なメソッドを除去する目的で適用する

一時変数のインライン化

簡単な式によって1度だけ代入される一時変数があり、それが他のリファクタリングの障害となっている → 一時変数への参照をすべて式で置き換える

  • 「問い合わせによる一時変数の置き換え」の一部として使われることが多い

問い合わせによる一時変数の置き換え

一時変数を使って式の結果を保持している → メソッド化してすべての変数を置き換える

  • 一時変数はメソッドを長くする要因となる。メソッドに置き換えてしまえば他のメソッドからも参照できる
  • 行いやすい状況:一時変数が1度だけ代入される場合や、代入される値を作る式が副作用を起こさない場合
  • パフォーマンスは問題になるまで気にしない

説明用変数の導入

複雑な式 → その式の結果または部分的な結果をその目的を説明する名前を付けた一時変数に代入する

  • 読みにくい式は分解してわかりやすくする
  • 複雑な条件、長いアルゴリズムなど
  • 通常はメソッドの抽出を行い、それが導入しにくい場合に使う

一時変数の分離

複数回代入される一時変数があるが、それはループ変数でも一時変数を集める変数でもない → 代入ごとに別の一時変数に分ける

  • 同じ一時変数を使いまわしている場合、他のリファクタリングがしにくくなる
  • 特殊な場合を除き一時変数への代入は1度だけにする

パラメータへの代入の除去

引数への代入が行われている → 一時変数を使う

  • パラメータを一時変数の代わりに利用しているようなケースに適用する

メソッドオブジェクトによるメソッドの置き換え

長いメソッドで「メソッドの抽出」を適用できないようなローカル変数の使い方をしている → メソッド自身をオブジェクトとし、すべてのローカル変数をそのオブジェクトのフィールドとする。そうすればそのメソッドを同じオブジェクト内のメソッド群に分解できる

  • 問い合わせによる一時変数の置き換えをしても、ローカル変数がメソッドの分解の障害になる場合に適用する

アルゴリズムの置き換え

アルゴリズムをより分かりやすいものに置き換えたい → メソッドの本体を新たなアルゴリズムで置き換える

  • より分かりやすい方法、より良い方法が見つかったら置き換えるべき
  • 問題がはっきりしないうちに書いたコードの改善、重複した機能を持つライブラリの使用など

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

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

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

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