クラス内の属性の先頭に単一のアンダースコアを使用すると、別のオブジェクトからアクセスするのは間違っているでしょうか? 「私はこれを好きなように使用しますが、ユーザーはそれに触れないでください」と言っている単一のアンダースコアですか、それとも開発者でさえそれがプライベートであるかのように扱うべきですか?
2 に答える
単一のアンダースコアは、それが一般消費用ではないことを示します。同じパッケージ内のコードは、突っ込んで作成することを歓迎します。
オブジェクト指向パラダイムの利点の 1 つであるカプセル化を壊すため、合理的に可能な限りそうすることを控えるべきだと思います。モジュールやパッケージなど、特定の上位レベルのスコープとして問題ないと感じる人もいますが、単一クラスのさまざまなメソッド内であっても、そうするのを避けるのが有用な経験則であることがわかりました-少なくともかなり複雑で微妙な場合、または後で変更したいと思うかもしれない側面だけです。
その理由は、あるオブジェクトで何かを行うたびに、あるオブジェクトの内部と、同じオブジェクトまたはモジュールの別の部分など、コーディングしている場所との間に依存関係を作成しているためです。これが多ければ多いほど、後で物事を維持または強化することが難しくなります。
考慮すべきもう 1 つの側面は、そうする必要があると感じたときはいつでも、より良い設計が必要であることを示している可能性があるという事実です。そのため、それを警告サインとして扱い、それに応じて対応することができます。
内部の詳細を扱う操作を行うためのインターフェイスを作成することは、多くの場合、そうしない場合よりも多くのコードを設計および実装する必要があることを意味します。そのため、いずれの場合も、メリットとコストを比較検討して、価値があるかどうかを判断する必要があります。最終的には、経験 (および継続中の場合は教育) により、そのような決定が本能的にも容易になります。