# 純粋関数

関数はなるべく純粋にしましょう。以下の条件を満たす関数を純粋関数と呼びます。

  • 参照透過
    • 同じ入力に対して同じ出力を返す
  • 副作用を持たない
    • 外部に影響を与えない

たとえばグローバル変数、現在時刻、乱数などに依存する関数は参照透過ではありません。また、グローバル変数の更新、DBへの挿入、HTTPリクエスト、ファイルへの書き込みなどを行う関数は副作用を持ちます。

純粋関数には以下のメリットがあります。

  • 外部の状態を考慮せずに済むので理解しやすい
  • 入出力のみで動作を検証できるのでテストしやすい
  • パフォーマンスを上げやすい
    • 同じ入力に対して計算せずに出力を返すメモ化が可能になる
    • 外部と分離されているので並列化しやすい

使用する値をすべて引数で渡すと純粋関数にできます。

NOTE

✏️ 関数はなるべく純粋にする

# 注意

純粋関数のみで構築できるソフトウェアは限られています。純粋関数の割合を増やし、非純粋な部分を分離することが重要です。