it-swarm-ja.com

すべてが他の1つの変数に依存する計算された変数を書き出す必要がありますか、それともその単一の変数のセッターで通常の変数として割り当てる必要がありますか?

私はSwiftを使用していますが、計算されたプロパティは他のいくつかの言語でも同様のものであることを理解しています。私は次の場合があります:

  • クラスbarのvarFooは、プログラムフロー全体で変更されます。
  • vars abc、およびdbarの値に制約されるため、計算されたプロパティとして定義することは、処理するためのクリーンな方法です。それ。
  • 制約は、barを取り値を出力する単純な計算です。

個々の変数のそれぞれのゲッターに式を書くことができます(式はわずかに異なります)。または、変数を通常のプロパティにして、barのセットに割り当てることもできます。
どちらがより好ましいですか?スタイル以外に考慮すべきことはありますか?

1
Kevin

はい、計算をこれらのプロパティのgetterに移動すると、実際に計算されたプロパティを読み取るときに実行されますのみ必要であるかどうかにかかわらず、毎回ではありません。そうではありません。それが違いを生むかどうかは、アクセスの一般性と計算のコストに完全に依存します。

3
Kilian Foth

@Killianの回答に基づく別のオプションは、計算をゲッターに保持し、すべての読み取りでの計算を回避するためにキャッシュすることです。

これを説明するためのC#のコードを次に示します。

public int? _cachedA = null;

private int _foo;

public int Foo {
    get { return _foo; }
    set {
        _foo = value;
        _cachedA = null;
    }
}

public int A {
    get {
        if (_cachedA == null) {
            _cachedA = magical_calculation(Foo);
        }
        return _cachedA;
    }
}
1
Emerson Cardoso