C++実装指針
インターフェース
- 入力と出力を宣言から区別できるか
- 非
const参照を出力引数として使っていないか - 複数の結果に名前が付いているか
- 不在と失敗が区別されているか
- エラー理由が失われていないか
所有権
- 資源の所有者が明確か
- 生ポインタが所有権を持っていないか
shared_ptrが本当に必要か- RAIIによってすべての終了経路で解放されるか
- 参照先の寿命が局所的に判断できるか
状態
- 可変状態のスコープは十分に小さいか
- 共有可変状態がないか
- 状態変更の責務が一箇所へ集約されているか
- 不正な中間状態を作っていないか
- 呼び出し順序への暗黙依存がないか
構造
- 上位関数から処理全体を読めるか
- 関数分割は意味の境界に基づいているか
- 一つの関数に複数の抽象度が混在していないか
- 過剰なManager、Context、Helperがないか
- 抽象化が認知負荷を実際に減らしているか
エラー
- 失敗可能な処理が型から分かるか
- 例外と戻り値の使い分けが適切か
- エラーを握り潰していないか
- 失敗時の状態を説明できるか
- ログが重複していないか