roofeehim.com

参照透過性

2024年1月18日

tags: クリーンコード 関数型プログラミング

「参照透過性(Referential Transparency)」が保たれた関数とは、関数が同じ入力に対して常に同じ出力を返し、副作用を持たない関数のことを指します。この概念は関数型プログラミングで特に重視されます。

参照透過性を持つ関数の特徴は以下の通りです。

  1. 一貫性のある出力: 同じ引数に対しては常に同じ結果を返します。外部の状態に依存しないため、関数を呼び出すたびに結果が変わることはありません。
  2. 副作用のない: 関数は外部の状態を変更しないし、外部の状態によってその挙動が変わることもありません。つまり、外部の変数を変更したり、外部の環境(ファイルシステム、データベースなど)に影響を与えたりしません。

たとえば、以下の関数は参照透過性を持ちます。

function add(a, b) {
  return a + b;
}

let result = add(2, 3); // いつでも5を返す

この関数は、常に同じ入力(この場合は23)に対して同じ出力(5)を返し、外部の状態に依存しないため、参照透過性が保たれています。

一方で、外部の状態に依存する関数や外部の状態を変更する関数は参照透過性を持ちません。これらの関数は同じ入力に対して異なる結果を返す可能性があり、プログラムの挙動を予測しにくくすることがあります。