
200
7 章 純粋性、不変性、変更ポリシー
var dissociativeIdentity = _.compose(_.identity, _.identity);
_.identity(42) === dissociativeIdentity(42);
//=> true
JavaScript
の
Math.abs
メソッドも同様に冪等です。
Math.abs(Math.abs(-42));
//=> 42
純粋関数のポリシーに拘るあまり、ダイナミズムを犠牲にする必要はありません。
しかし、変数を変更する度に、その変数を参照するタイミングによって異なる値が返
されるという可能性が発生している、ということを念頭に置いてください。変更する
変数がたとえクロージャにカプセル化されているか、コンテナオブジェクト(本章で
後ほど説明します)に格納されているとしても同様です。つまり、プログラム実行中
の任意の時点において、その状態は、微妙な変更作用の発生に左右されるということ
です。
プログラムのすべての状態変更を除去することは不可能かもしれませんが、可能な
限り減らす方がよいでしょう。変更をコントロールする考え方については本章でのち
ほど説明します。しかし次にまず、関数の純粋性に関連している「不変性」の考え方
について説明します。不変性は言い換えると、状態変更が存在しないという性質で
す。
7.3
不変性
JavaScript
には、デフォルトで不変性(
immutability
)を持ったデータ型はほとん
どありません。文字列型はその中でも不変性を持った数少ないデータ型です。 ...