れいがい!
例外むずい。むずいから考える。考えても全然文章にならないので言葉の断片を並べる。以下ではレイヤーとスコープはだいたい同義だと思う。
- 例外はいつ使うべきなのか?
- エラーであることの表現として使うとすると、あるレイヤーで、そのレイヤーから分かる情報だけでは対処不能な状況に対して、より多くのコンテキストを持っているであろうと予想される上位のレイヤーに対してその対処を委ねる手段となる?
- 関数が例外を投げる理由
- どんな状況をエラーとするのか?
- アサートとエラーと例外
- 上位レイヤーが必要としている情報
- エラーを例外として表現するレイヤーが用意できる情報
- あるレイヤーが捕捉して対処できる例外とそれ以外の例外
- あるエラーに関する例外が全てそのエラーに対応する例外用の型もしくはその派生型で表現するべきというコンベンションがあるなら、検査例外は十分に有効なはずじゃないの?それでも私がこうやってうなってるのは何なの?頭が悪いだけですねすんません。それは置いといて、その方法で割と問題ない感じなの?
- 例外は予測できるもの?
- 例外は予測できる範囲内のエラーに使うべきもの?
- 例外を投げる側について
- いつ投げるか?どうしようもないときとか。引数間違っていればそれはどうしようもないけど、それは例外なのかアサーションでいいのか?私はassert(x); if (x) { throw xxx; }とかやってた
- どんな情報を投げるべきか?
- 例外を投げるかもしれない関数を呼ぶ側について
- どこまで責任をもって捕捉するべきか
- 捕捉したあとその例外データを加工するか何かして再度投げるかそのまま処理を続行するかの基準。続行できてもやっちゃうのはどうなの?という場合とか、それは上位コンテキストに依存するときとか。いや依存するならそれはやはり例外として上に伝播するべきか。
- 自動伝播について
- 代替手段(Maybeなど)
だめだ断片もあまりにカオス過ぎて意味分からん…