getter
privateなpropertyに外からアクセスするためのpublic method
例
code:ts
class UserCreateInputData {
constructor(private userName: string) {}
get getUserName(): string {
return this.userName;
}
}
getterの存在意義
OOPには、「データではなく、振る舞いに依存する」のが良い、という思想がある
propertyに直接アクセスすのではなく、geterを挟むことで「ふるまいに依存する」に変化するらしい
表現自体にあまりしっくり来てはないないがなんとなく言いたいことはわかるmrsekut.icon
getterを定義することで、そのgetterのみが「全世界で唯一そのデータにアクセスできるモノ」になる
どこからでもアクセスできる存在から、1箇所で定義されるものへと変わる
getterを定義し、間接的にデータにアクセスすることで、そのデータの責務に変更が入った際に、依存箇所を修正しやすい
この文脈で対象にしているpropertyに、public/privateという区別はなさそうmrsekut.icon
例えばcountというpropetyを持っていて、これを様々な場所で使っているとする
外部でも、内部でも
code:ts
class P {
count: number;
..
hoge() {
const a = this.count * 100;
...
}
}
ここで、countの表すものに修正が加わったとき、this.countとかp.countで参照しているところを全て修正する必要がある
しかし、getterを挟んでいれば、getter自体を修正するだけで済む
code:ts
class P {
get getHoge() {
return this.count * 100;
}
}
getter名が実装とズレる気がするが、この修正も容易ではあるmrsekut.icon
ただたんにpropertyをそのまま返すmethod」がgetter、というわけじゃないのね #?? private propertyに対するgetterの存在理由
アンチgetter派の意見は、ここに対してのアンチっぽいが、そもそものここの存在意義を知らんのでなんとも言えないmrsekut.icon
「getterを使うこと」が悪いのか?という気もする
getterの使い方を工夫しよう、という主張じゃダメなのか?
propertyに外部からアクセスできるかどうか
Rubyの場合はpublic/private問わず外部からはアクセスできない?
試してはないが、そうっぽいというのを目にしたmrsekut.icon
故に、getterが必須となる、と理解したが本当のところは知らん
getter定義を楽にする構文
Rubyにはattr_readerというのがある
arrt_readerをdefaultにすればええやんmrsekut.icon
参考