🤥

純粋関数とは

2023/01/07に公開

英名

Pure funciton

純粋関数とは

  • 引数が同じ場合、常に同じ結果を返す(参照透過性とも言います)
  • 副作用が発生しない

純粋関数の例

毎回白いお米が炊きあがります。
これで、毎回美味しい白米が食べれますね。

function cookRice(お米) {
    お米を洗う;
    炊飯器でお米をたく;
    return 炊いたお米;
}

純粋関数でない例

日によっては意図せず栗ご飯や、炊き込みご飯ができあがりそうですね...
冷蔵庫の状態に左右されて、この関数の結果は変わってしまいます。

それゆえ、cookRice()引数は同じだけど常に同じ結果を返さない関数です。

function cookRice(お米) {
    お米を洗う;
    if (冷蔵庫に何かあれば) {
      混ぜる;
    }
    炊飯器でお米をたく;
    return 炊いたお米;
}

上記の例は同時に、副作用も起こしています。
純粋関数は出力を返すだけが仕事ですが、cookRice()は外部の状態(冷蔵庫の中身)を変化させてしまっているからです。

何が嬉しいの

  1. 純粋関数はテストがしやすい
    入力に対しての出力を確認するだけで済む
  2. 気軽に呼べる
    外部の状態などを変化させないので、影響の調査しなくて済む

まとめ

純粋関数にはメリットがあるが、全ての処理を純粋関数にするのは不可能に近い。
しかし、純粋関数にできるものはできるだけするように心掛ける。
副作用のある関数と純粋関数を明確に分離すれば、綺麗なコードになり、保守性も上がる。

参照

https://qiita.com/oedkty/items/f5fb807390a87359da0f
https://tamiblog.xyz/2020/07/19/post-780/

Discussion