• エラーの種類
    • logic error
      プログラミングミスによるもの
    • runtime error
      プログラマでは防げないもの
      eg. “network service unavailable” error
  • C-style や COM によるエラーハンドリング
    • 関数の実行毎に error code を返したり
      eg. return HRESULT
    • グローバルオブジェクトから caller が選択的にエラーコードを取得できる様にしたり
      eg. GetLastError()
  • assert
    • 開発時に絶対起こり得ない条件に対して assert を使用する
  • exception
    • ランタイムで発生し得るエラーは exception を返す
    • 利用者がリカバーできる場合に使用する
      eg. “file not found” or “out of memory.”
    • cf. MS では arguments チェックは exception としている※
      何故ならどんな値の組み合わせが入力されるか分からないから。

      Always check arguments to public functions by using exceptions. Even if your function is error-free, you might not have complete control over arguments that a user might pass to it.

  • 勿論契約プログラミングでは※とは限らない
    • 契約プログラミングにおいて利用者が適切な引数を渡す責務がありライブラリでは不適切な引数をアサートする
      cf. Pragmatic Programmer – Design by Contract section (chapter 4)
  • パラメーター Validation の方法(契約プログラミングとか関係なく)
  • ある機能を提供するインタフェースで Result を返すものとその他を返すものが混在しているインタフェースについて
    • 統一感が無いというデメリットはある
    • 実際にそういうインタフェースになっている API もある
      eg. d3d12x.h では HRESULT を返す必要が無いものは返していない。