カプセル化
JavaScript でも Python でも '_' で始まるプロパティやメソッドは、そのファイルスコープ、あるいはオブジェクトのスコープだけで参照してください。
— いけべ (@ikb) July 21, 2017
これはキーワードで明示的アクセス制限できない言語で紳士協定として導入された名前規則です。尊重してください。
具体的にいうと this._hoge や self._foo() は良くて、 piyo._fuga や poyo._foo() はアウトです。
— いけべ (@ikb) July 21, 2017
ちょっとわかりにくいかもしれませんが this._foo._bar もアウトです(_foo._bar がルールに抵触するため)。
このルールを回避するために this._foo を foo に変名する、あるいは this.getFoo = function() { return this._foo; } のようなアクセッサーを追加する、ということも禁止です。
— いけべ (@ikb) July 21, 2017
オブジェクトの境界は、ある関連をもった複数のプロパティをまとめて管理するために使います。
— いけべ (@ikb) July 21, 2017
オブジェクトの関数は、関連を持つ複数のプロパティが、同時に満たすべき制約条件を壊さないように導入するものです。
プライベートなプロパティは、制約を満たし続けるよう管理するために使います。
— いけべ (@ikb) July 21, 2017
これをひとつ取り出して変更できるアクセッサーを追加するということは、オブジェクトの管理責任放棄です。
プライベートなプロパティを、そのオブジェクトの外から変更することは、オブジェクトの管理責任侵害です。
このアクセス制約は「カプセル化」として知られており、プログラムの品質担保に大きな役割を果たします。
— いけべ (@ikb) July 21, 2017
知っていた人は改めて、知らなかった人はこれから、注意するようお願いします。
さすがに同じレビューを繰り返すのに心が疲れ切ったので、あった…。