getter/setter不要論までのOOPの流れ
public propertyが定義できるクセに、それは良くないから使うなとか、
getter/setterは定義できるクセに、それは良くないから使うなとか、
OOPは、OOPの暗黙のルールが多すぎmrsekut.icon
この辺の流れを順序立てて書くとこんな感じだろう
classはpropetyを、publicでもprivateでも定義できる
しかし、publicにして定義すると、
直接class外からpropertyの値を参照できる
その値を修正したい場合に修正箇所が多い
直接class外からpropertyに値を代入できる
外部から全くおかしい値を代入できてしまう
e.g. human.age = -100
というような問題が生じる
そこで、public propertyは使わず、getter/setterを使おうとなる
getterを使うことで、propertyのwrapperを作る
valueを返していたところを、value*1.1を返すように修正するのは容易
setterを使うことで、値のvalidationができる
setter内でvalidationしてから値をsetできるので変な値が入らない
しかし、更にclassもimmutableにやっていくべきという流れになる
ここでgetterは不要/setterは不要論が出てくる
修正の容易さ以前にそもそもただのデータのwrapperだけのためにclassを使うな
ロジックを含めて値を返すべき
Domain Objectにしよう
だからgetterは不要
classはimmutableであるべき
instantiateした時点で固定されるべき
完全Constructorにしよう
だからsetterは不要
mrsekut.iconとしては、この文脈には大方賛同する
が、「getterは不要」は主張として強すぎないか?という気はする
「何でもかんでもただのgetterを書くな」ぐらいが主張したいことと合っている気がする
あるいは「getterはほとんど不要」とか
https://twitter.com/mrsekut/status/1467833869005385731
最初からimmutableでしかOOPできないような言語設計にしろよと思うmrsekut.icon
classはOOPの手段として適切でない気がしてならない
getter/setter推進
http://fukumori.org/oo/why_use_getters_and_setters_j.html
getter/setterが必要な理由
https://nagise.hatenablog.jp/entry/20141010/1412930502