本文へスキップ

参照透明性とは?

さんしょうとうめいせい

参照透明性とは、同じ引数を与えた関数呼び出しは常に同じ値に置き換えられるという性質のことです。

参照透明性(Referential Transparency)とは、ある式を評価した結果の値で、その式をプログラム中のどこでも置き換えても全体の振る舞いが変わらないという性質を指します。数学における「関数」の概念に対応しており、純粋関数型プログラミングの核心的な概念の一つです。

参照透明な式の条件は、

  • 同じ入力に対して常に同じ出力を返すこと(決定論的であること)
  • 副作用(ファイルへの書き込み、グローバル変数の変更、ネットワーク通信など)を持たないこと
この両方を満たす関数を純粋関数(Pure Function)と呼びます。

参照透明性が保たれている場合、コンパイラや処理系は式の評価順序を変更したり、結果をキャッシュ(メモ化)したり、並列に評価したりする最適化が安全に行えます。Haskellはこの性質を言語レベルで強制しており、副作用はIOモナドを介してのみ許可されます。

参照透明性の対義語は参照不透明であり、同じ式でも呼ばれるタイミングによって異なる値を返す可能性がある状態を指します。例えばシステム時刻の取得、乱数生成、グローバル変数への依存などは参照透明ではありません。

テスト容易性の観点でも参照透明性は重要です。純粋関数はモックや依存性注入なしに単体テストができるため、大規模ソフトウェアの品質維持に寄与します。

使い方・例文

add(2, 3) という呼び出しは常に5を返すため参照透明ですが、Math.random() は呼ぶたびに異なる値を返すため参照透明ではありません。関数型プログラミングでは参照透明な関数を組み合わせてプログラムを構築します。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語