C++実装指針

インターフェース

  • 入力と出力を宣言から区別できるか
  • const参照を出力引数として使っていないか
  • 複数の結果に名前が付いているか
  • 不在と失敗が区別されているか
  • エラー理由が失われていないか

所有権

  • 資源の所有者が明確か
  • 生ポインタが所有権を持っていないか
  • shared_ptrが本当に必要か
  • RAIIによってすべての終了経路で解放されるか
  • 参照先の寿命が局所的に判断できるか

状態

  • 可変状態のスコープは十分に小さいか
  • 共有可変状態がないか
  • 状態変更の責務が一箇所へ集約されているか
  • 不正な中間状態を作っていないか
  • 呼び出し順序への暗黙依存がないか

構造

  • 上位関数から処理全体を読めるか
  • 関数分割は意味の境界に基づいているか
  • 一つの関数に複数の抽象度が混在していないか
  • 過剰なManager、Context、Helperがないか
  • 抽象化が認知負荷を実際に減らしているか

エラー

  • 失敗可能な処理が型から分かるか
  • 例外と戻り値の使い分けが適切か
  • エラーを握り潰していないか
  • 失敗時の状態を説明できるか
  • ログが重複していないか