関数のインライン化
動機
意図がわかるように命名された短い関数を使うことはコードを読みやすくする。しかし、関数の本体がその名前と同じくらいわかりやすいことがある。そうしたときには関数を取り除く。
「関数のインライン化」は、うまく分割できない関数群があるときにも使われる。こうしたときは、それらを1つの大きな関数にインライン化してから、望ましい形の関数群として再抽出すればよい。
通常、「関数のインライン化」を使うのは、間接化しすぎた結果、どの関数も別の関数へ委譲しているだけにしか見えず、委譲に次ぐ委譲の途中で迷っている状態。
手順
- 関数がポリモーフィックなメソッドでないことを確認する。
クラスのメソッドで、サブクラスでオーバーライドされている場合はインライン化できない。 - この関数の呼び出し元をすべて見つける。
- 関数の各呼び出し元をすべて見つける。
- 1つ置き換えるごとにですとする。
すべてのインライン化を一度にする必要はない。一部のインライン化がやりにくいようなら、機会を持って徐々に進めてもよい。 - 関数の定義を取り除く
Before
def say_state(self):
print_state(self)
def print_state(self):
print(f"I'm going {self.speed} kph!")
After
def say_state(self):
print("I'm going {} kph!".format(self.speed))