【じゅんすいかんすう】

純粋関数 とは?

最終更新:
💡 同じ材料から同じ結果を返す、計算の担当

同じ入力なら同じ結果を返し、入力や外部の状態を変更しない関数。計算を外部とのやり取りから分けることで、動きを理解し、入出力を検証しやすくできます。

📌 このページのポイント
同じ入力なら、同じ結果純粋な計算の例外の状態に依存double(3)nextNumber()結果は 61 → 2 → 3 …何度呼んでも同じ外のカウンターを呼ぶたびに増やす計算と、外の変更を分けて考えよう純粋な計算も、正しさの検証は必要
2倍を返す計算と、外部のカウンターを増やす関数の比較。必要な副作用は、計算から分けて扱います。
ひよこ ひよこ
どんな関数が純粋なの?
ペンギン先生 ペンギン先生
例えば数を受け取って2倍を返す関数。同じ数なら同じ結果で、元の値や外の変数も変更しないね。対して、内部で現在時刻や乱数を読み結果を変える関数は、同じ引数でも結果が決まらないよ。
ひよこ ひよこ
計算の途中で変数を使ったら、もう副作用?
ペンギン先生 ペンギン先生
自分の中で新しく作った変数や配列を変更するだけなら、それで不純になるとは限らない。渡された配列を直接変更したり、外の変数を書き換えたりすることとは分けよう。時刻が必要なら、取得した値を入力として計算へ渡す方法もあるんだ。
ひよこ ひよこ
全部、純粋関数にすればいい?
ペンギン先生 ペンギン先生
ファイルへの保存や通信など、外の状態を変える仕事も必要だよ。計算の部分と外部とのやり取りを分けると、計算は入出力で試しやすくなる。ただし純粋でも、計算式が間違えば結果も間違う。必要なケースはきちんと検証しよう。
ひよこ ひよこ
Reactでも使う考え方なの?
ペンギン先生 ペンギン先生
うん。描画中はpropsだけでなくstateやcontextも入力として扱い、元の値を直接変更しない。クリック後の処理などはイベントハンドラーへ置き、外部との同期が必要な場合にEffectを使うよ。副作用を何でもuseEffectへ移す、という意味ではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「純粋関数」って出てきたら「同じ入力なら同じ結果で、外の状態を変えない関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「Pure Function」 = 純粋な関数
💬 計算結果が入力で決まり、呼び出し前から存在する状態を変更しない関数を表します。「よい関数は全部純粋」という優劣の呼び名ではありません。

参考資料

← 用語集にもどる