命令型のオブジェクト指向言語では、ミュータブルまたはイミュータブルなクロージャーを持つ方が理にかなっていますか?
例えば:
int i=5;
function() f={print(i);};
f();
i=6;
f();
クロージャーが変更可能な場合、これは次のように出力されます。
5
6
不変の場合は、次のように出力されます。
5
5
不変のクロージャーを使用しても、これを実行できることを認識しています。
class I {int i;}
I i=new I();
i.i=5;
function() f={
I j=i;
print(j.i);
};
f();
i.i=6;
f();
では、ミュータブルまたはイミュータブルなクロージャーを用意した方がよいでしょうか、それとも両方のオプションを用意したほうがよいのでしょうか? イミュータブル クロージャは実装しやすいように思われるので、現時点では、そうしない正当な理由がない限り、それを使用すると思います。