🐷

リファクタリング - 関数の抽出

2024/05/31に公開

はじめに

リファクタリングで頻繁に起きる関数の抽出について学んだものです。
小さく分けた方が良いとは聞いたことありますが、実際にリファクタリングするときにどのような指針で抽出するのかわからなかったのでそれをまとめようと思いました。

関数の抽出

コードの断片をみて、何をしているのか理解し、適切な名前を付けること。

手順

  • 新しい関数作り、その意図に沿って命名する
    • ここが一番大事
    • これが間違っているとコードリーディング中に勘違いしてしまう
  • 抽出したい関数を、元の関数から新たな関数にコピーする
    • 直接触らないのが大事
    • リファクタリング中に壊れても問題ない
  • 抽出したコードを調べて、元の関数ではスコープ内だったが抽出後の関数ではスコープ外になった変数を特定し、それをパラメータとして渡す
  • 元の関数に残った抽出前のコードを抽出された関数への呼び出しに変える
  • テストを実行する
    • テストが失敗したら切り出しが間違っているので見直す
  • 残りのコードを見て、抽出したコードと同じか類似したコードを探して新しい関数呼び出しに変更できないか検討する

関数の抽出が適さないとき

新しい関数として定義するときに適切な名前が見つからないとき。
これは抽出範囲が間違っている可能性があるか、そもそも抽出すべきでないことの表れかもしれない。
しかしながら、リファクタリングを進める中でよい名前を思いつくこともあるのでまずは抽出してみる。
それでやっぱり思いつかないのであればインライン化して元に戻そう。
この工程の中で学ぶことがなにかあれば無駄じゃないはず。

Discussion