副作用と参照透過性の関係について図でおさらい
·65 文字·1 分
参照透過性 #
- 副作用がない
- 関数外の値を参照しない
関数がこの 2 つの条件を満たすとき、その関数は参照透過性をもつという。
参照透過性があると、
- メモ化ができる
- テストが書きやすい
という利点がある。
参照透過性がある関数のことを 純粋関数 とよぶ。
例 #
これは副作用あり (図の 2 + 3)
fn1(n) {
console.log('hoge');
return n + 1;
}
これは副作用なし。(図の 4)
fn2(n) {
return n + Date.now();
}
fn1、fn2 ともに参照透過性はない。
fn3(n) {
return n + 1;
}
これは参照透過性がある(図の 1)
冪等性 #
冪等性は副作用がある場合だけの性質で、 同じ副作用を何回起こしても、二回目以降システムの状態が変わらないときに冪等性があるという。
たとえば fn1 を 2 回呼び出したときに、標準出力に hoge が 2 回出力されるが、 これが 1 回しか出ないような実装になっていれば冪等性がある。