関数の分解とは
関数の分解とは、一つの大きなタスクを複数の小さなタスクに分けて、それぞれを独立した関数として定義することです。
関数の分解の例
例として物体がある速度で壁に衝突した時に失われる運動エネルギーを求める関数を考えます。
引数としては、物体の質量、物体の速度、物体と壁との反発係数を与えます。
これらを一つの関数で表現すると、以下のようになります。
function lostKineticEnegy(float $mass, float $velocity, float $coefficientOfRestitution): float{
return 0.5 * $mass * $velocity ** 2 - 0.5 * $mass * ($coefficientOfRestitution * $velocity) ** 2;
}
これでは長ったらしくてどこで何をしているのかが分からず、可読性が低いです。
また、エラーが発生してもどこが間違っているのか探すのが大変です。
そこで、関数を分解します。
速度と反発係数から衝突後の速度を求める関数、質量と速度から運動エネルギーを求める関数を作ってみましょう。
function velocityAfterCollision(float $velocity, float $coefficientOfRestitution): float{
return $velocity * $coefficientOfRestitution;
}
function kineticEnergy(float $mass, float $velocity): float{
return 0.5 * $mass * $velocity ** 2;
}
これらの関数を使用すると、失われる運動エネルギーを求める関数は以下のように記述できます。
function lostKineticEnegy(float $mass, float $velocity, float $coefficientOfRestitution): float{
return kineticEnergy($mass, $velocity) - kineticEnergy($mass, velocityAfterCollision($velocity, $coefficientOfRestitution));
}
関数を小分けにして利用することで、何をしているのかが分かりやすくなり可読性が向上しました。
また、他の場面で運動エネルギーを求める必要が出てきたら、kineticEnergy関数を再利用することができます。
このように、関数を分解するとさまざまなメリットがあります。