LoginSignup
0
0

More than 1 year has passed since last update.

副作用とコマンド・クエリ分離の原則 (CQS) について簡潔にまとめてみた

Posted at

プログラミングにおける副作用とは?

  • 関数またはメソッドを実行した時に、オブジェクトの属性が変化すること
    • 例)メソッドのスコープ外の変数の値を変更している
    • この場合、時間とともに変数の値が変化し続ける → 毎回違う結果になる可能性が高い

  • 予期せぬエラーを発生させるリスクとなる
    • どこに影響があるか都度調査しなければならない

  • 副作用を防ぐには参照透過性を担保する必要がある
    • 参照透過性 = 同じ条件を与えれば必ず同じ結果が得られる
    • 他の機能に影響を与えない

副作用のコード例

    // 副作用の例
    // Add を実行するたびに得られる結果が変わってしまう
    int a = 1;
    public int Add(int b)
    {
        a = a + b;
        return a;
    }

コマンド・クエリ分離の原則(CQS)

  • 副作用を最小限に抑える設計原則
  • メソッドがオブジェクトの状態を変更するのであれば、そのメソッドはコマンド
    • 値を返してはいけない
  • メソッドが何らかの値を返すのであれば、そのメソッドはクエリ
    • オブジェクトの状態を変更してはいけない
  • 状態を変更するメソッドと変更しないメソッドを明確に分ける → 非常に扱いやすくなる
    • 副作用によるリスクを局所化する

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0