参照透過性(さんしょうとうかせい、Referential transparency)は、計算機言語の概念の一種である。
ある式が参照透過であるとは、その式をその式の値に置き換えてもプログラムの振る舞いが変わらない(言い換えれば、同じ入力に対して同じ作用と同じ出力とを持つプログラムになる)ことを言う。
具体的には変数の値は最初に定義した値と常に同じであり、関数は同じ変数を引数として与えられれば同じ値を返すということになる。
当然変数に値を割り当てなおす演算である代入 (Assignment) を行う式は存在しない。
このように参照透過性が成り立っている場合、ある式の値、例えば関数値、変数値についてどこに記憶されている値を参照しているかということは考慮する必要がない、即ち参照について透過的であるといえる。
純粋な関数
純粋(pure)な関数とは、以下の2つの条件を満たす関数のことです。
- 参照透過である
- 副作用を持たない
参照透過(referentially transparent)な関数とは、同じ値に適用すれば結果も毎回同じ値になるような関数のことです。
つまり参照透過な関数の適用結果は、引数の値のみによって決まります。
裏に隠した小細工が無いという点で、透過という表現がマッチしています。
引数以外の情報(例えばグローバル変数やインスタンス変数の値など)によって結果が左右されるような関数やメソッドは参照透過ではありません。
関数適用の本質(いわば本作用)は、引数の値に基づいて評価結果を返すことです。
それ以外の作用を副作用(side effect)と呼びます。
例えばグローバル変数の値を変更したり、画面に何かを表示したり、音を鳴らしたりするのは副作用です。
そういった作用を持つ関数は純粋ではありません。