同じ処理は1つの関数に纏める(関数リファクタリング②)

こちらは前回紹介した、同じ処理は1つの関数に纏める(関数リファクタリング①)の続きになります。

私たちがソフトウェア開発をする上で、様々な問題をもたらす「クローン」に対する有効な処置として「関数リファクタリング」を紹介しました。

クローンにも何種類かパターンがあります。その中で最も簡単なパターンに対する関数リファクタリングを紹介します。最も簡単なパターンは下図のようなクローンコードです。

このパターンをご覧になった方は「なんだ…簡単じゃないか…」と思われた方も多いと思います。実際簡単です。しかし、クローンのパターンに関わらず、多くの方が3つの大きなミスを犯してしまいます。

  1. 関数化(クローン部分の摘出)と関数置き換えを同時にしてしまう
    作業のスピードを重視し、手順をスキップしたことで、かえってエラーが多発し、手戻りが発生する
  2. タイピングして書き換えてしまう
    リファクタリングは元のソースコードを再利用しなければなりません。タイピングして、コードを書き換えたら、それは再利用ではありません。
  3. 必要以上に作り直ししてしまう
    良かれと思い、関数リファクタリングしながら改善活動を行ってしまいます。これは作り直し・再設計です。

関数リファクタリングで大切なことは「こまめなコンパイル・リンク」「元のソースコードの流用」です。次の手順をしっかり守りましょう。

  1. 摘出するブロックを特定する
  2. 摘出するブロックに相応しい名前の関数(中身は空、引数・戻り値はvoid)を作る
  3. 2の関数に摘出するブロックをコピー&ペーストする(元のコードはそのまま)
  4. 2の関数のコンパイルが通るまで調整する
  5. 2の関数のコンパイルが通ったら(関数として成立する)、元のブロックを関数呼び出しに置き換える

クローンのパターンによって作業手順が変わるのは、4.のコンパイル作業です。場合によっては引数や戻り値を設定しなければなりません。最も簡単なパターンが正しく実施できなければ、難しいパターンはマスターできません。まず、最も簡単なパターンをマスターしましょう。