私はプログラミングの経験はありませんが、メソッドを介して変数を設定することの違いは何だろうと思っていました。
元:
void setShowFPS(boolean b){
this.showFps = b;
}
vs. 変数を呼び出すだけ
showFps = false;
私はプログラミングの経験はありませんが、メソッドを介して変数を設定することの違いは何だろうと思っていました。
元:
void setShowFPS(boolean b){
this.showFps = b;
}
vs. 変数を呼び出すだけ
showFps = false;
一般に、変数をクラス外のユーザーに公開しないことが最善です。メソッドを使用すると、より多くの制御が可能になります。たとえば、ブール変数が に設定されたときにイベントをトリガーしたい場合true
、メソッドで実行できますが、変数が設定されているときは実行できません。
void setShowFPS(boolean b) {
this.showFps = b;
// Trigger the event
if (b) {
OnFpsSet();
}
}
さらに、C# には、メソッドと同じくらい多くの制御とカプセル化を提供するプロパティが用意されており、外部では変数のように見えます。単一引数の setter メソッドの代わりにプロパティを使用する方がより慣用的です。
bool _ showFps;
bool showFps {
get {
return _showFps;
}
set {
_showFps = value;
}
}
そのすべてはコンセプトに基づいてencapsulation
いabstraction
ます。コードが誤って変更されないように、データとコードを結合/バインドします。変数を非公開にする/外部から直接アクセスできないようにすることで、データの偶発的な変更を防ぐことができます (ゲッター/セッター/メソッドを提供してデータにアクセスします)。
NOTE
: オブジェクト指向プログラミングは、コードよりもデータ指向です。
プライベート変数をカプセル化する理由を意味していると思いますか?
いくつかの理由があります:
検証ロジック - 明示的なセッターを使用すると、フィールドに設定できる値の有効範囲を制御できます。誰かが無効な値を設定しようとすると、例外をスローできます。
オブジェクトがコントラクトを実装する方法を非表示にします。これにより、実装に依存する他のコードを壊すことなく、後でクラスの動作を変更できます。
いくつかの更新をアトミックに実行します。より複雑な操作は、すべてを「同時に」実行できない場合があります。同期とロックのメカニズムを使用することで、マルチスレッド環境で安全に公開できます。