generated at
Epochal Time Model
この図、わかりにくくない #??
mrsekutが知らんだけか
Identityがでかいのがわかりにくい
valueを参照してる感じで書けばいいのに、と思った

2009年のJVMSummitで発表

ClojureのDocs
こっちの訳の方がいいmrsekut



用語
identity
stateが変化しても同一のもの
immutableである
value
これもimmutableである
state
stateとは、ある時点でのidentityのvalueである
同一のidentityと、複数のvalueの対応付けのこと
valueがimmutableなので、stateもimmutableである
故に、(valueを削除していなければ)いつでも過去のstateを参照できることになる
参照するvalueを切り替えれば、「stateが変わったこと」になる


「過去の私」と「現在の私」と言う場合
はidentity
年齢( 1,2,...,20 )はそれぞれvalue
状態は( , 1 )とか( , 2 )とか


一方でOOPでは
identityとstateが密結合
故に状態を安易に変更できる
>これは彼らが使う言語のせいだ。そういった言語では、アイデンティティやオブジェクトと同様に値を扱うためデフォルトで書き換え可能であり、そのため特に卓越したプログラマーでない限り、アイデンティティを作りすぎたり、値にするのが適切なものをアイデンティティにしてしまうのだ。ref
後付けで、DDDのEntityとかも提唱されてきたが、それを表現するツールとしてclassが適切でないだろうことは明らかmrsekut
Entityは、immutableでなことができるはずのclassを、こっちの方がいいからという理由でmutableにしている
良い設計をするために「知識」が必要になる
「DDDの知識」がない人はそういう発想をしないほうが普通
ツールが悪い


実際Clojureではどうやってるのか
alter
commute
send
atom, agent

ながすぎ


参考