私の理解では、「参照透過性」という用語は、実際には機能コードにのみ適用できます。ただし、オブジェクト指向コードのオブジェクトに対するメソッド呼び出しは、メソッドの戻り値であり、メソッド呼び出し後のオブジェクトの状態は、呼び出し前のオブジェクトの状態のみに依存するという同様のプロパティを持つことができます。 、およびメソッドの引数。
つまり、機能的な参照透過性:
i = foo(n, m);
// return value depends only on n, m
オブジェクト指向「参照透過性」:
i = obj.foo(n, m);
// return value, and subsequent state of obj, depends
// only on initial state of obj, n, m
この物件に名前はありますか?
の呼び出し中にの状態がobj
変化しない場合、関数のオーバーロードがサポートされている場合、「オブジェクト指向」スタイルは次のように書き直すことができるためfoo()
、関数形式と同等です。
i = foo(obj, n, m);
// return value depends only on obj, n, m
ただし、メソッド呼び出しで状態が変化することはかなり一般的であるため、obj
これが分析に役立つかどうかはわかりません...