同じ処理は1つの関数に纏める(関数リファクタリング②)
こちらは前回紹介した、同じ処理は1つの関数に纏める(関数リファクタリング①)の続きになります。
私たちがソフトウェア開発をする上で、様々な問題をもたらす「クローン」に対する有効な処置として「関数リファクタリング」を紹介しました。
クローンにも何種類かパターンがあります。その中で最も簡単なパターンに対する関数リファクタリングを紹介します。最も簡単なパターンは下図のようなクローンコードです。
このパターンをご覧になった方は「なんだ…簡単じゃないか…」と思われた方も多いと思います。実際簡単です。しかし、クローンのパターンに関わらず、多くの方が3つの大きなミスを犯してしまいます。
- 関数化(クローン部分の摘出)と関数置き換えを同時にしてしまう
作業のスピードを重視し、手順をスキップしたことで、かえってエラーが多発し、手戻りが発生する - タイピングして書き換えてしまう
リファクタリングは元のソースコードを再利用しなければなりません。タイピングして、コードを書き換えたら、それは再利用ではありません。 - 必要以上に作り直ししてしまう
良かれと思い、関数リファクタリングしながら改善活動を行ってしまいます。これは作り直し・再設計です。
関数リファクタリングで大切なことは「こまめなコンパイル・リンク」「元のソースコードの流用」です。次の手順をしっかり守りましょう。
- 摘出するブロックを特定する
- 摘出するブロックに相応しい名前の関数(中身は空、引数・戻り値はvoid)を作る
- 2の関数に摘出するブロックをコピー&ペーストする(元のコードはそのまま)
- 2の関数のコンパイルが通るまで調整する
- 2の関数のコンパイルが通ったら(関数として成立する)、元のブロックを関数呼び出しに置き換える
クローンのパターンによって作業手順が変わるのは、4.のコンパイル作業です。場合によっては引数や戻り値を設定しなければなりません。最も簡単なパターンが正しく実施できなければ、難しいパターンはマスターできません。まず、最も簡単なパターンをマスターしましょう。