🤥
純粋関数とは
英名
Pure funciton
純粋関数とは
- 引数が同じ場合、常に同じ結果を返す(参照透過性とも言います)
- 副作用が発生しない
純粋関数の例
毎回白いお米が炊きあがります。
これで、毎回美味しい白米が食べれますね。
function cookRice(お米) {
お米を洗う;
炊飯器でお米をたく;
return 炊いたお米;
}
純粋関数でない例
日によっては意図せず栗ご飯や、炊き込みご飯ができあがりそうですね...
冷蔵庫の状態に左右されて、この関数の結果は変わってしまいます。
それゆえ、cookRice()
引数は同じだけど常に同じ結果を返さない関数です。
function cookRice(お米) {
お米を洗う;
if (冷蔵庫に何かあれば) {
混ぜる;
}
炊飯器でお米をたく;
return 炊いたお米;
}
上記の例は同時に、副作用も起こしています。
純粋関数は出力を返すだけが仕事ですが、cookRice()
は外部の状態(冷蔵庫の中身)を変化させてしまっているからです。
何が嬉しいの
- 純粋関数はテストがしやすい
入力に対しての出力を確認するだけで済む - 気軽に呼べる
外部の状態などを変化させないので、影響の調査しなくて済む
まとめ
純粋関数にはメリットがあるが、全ての処理を純粋関数にするのは不可能に近い。
しかし、純粋関数にできるものはできるだけするように心掛ける。
副作用のある関数と純粋関数を明確に分離すれば、綺麗なコードになり、保守性も上がる。
参照
Discussion