Reactのアプリケーションをつくっているときに例外処理について悩んでいた
Javaエンジニア出身としては、RuntimeExceptionをラップして適した名称のExceptionをつくるみたいなのが良いかなと思っていた
そんなとき、以下の@takepepeさんの記事を読んだり、他の人の話をきいて考えが変わったのでメモ zenn.dev
フロントもバックもやるエンジニアのコンテキストスイッチを減らす目的でJavaに合わせるのがよいと考えていたが、JSはJavaとは違って
- try/cache
- Promise
- async/await
が絡んでてややこしい言語である
なので、まずJavaとは別のJSの例外処理を考えるべきだった
@takepepeさんの記事では
- データ取得も宣言的に書きたいから
- データ取得に関係ない例外も catch してしまうから
- HttpError の集計に不便だから
という理由で try-catch しないというは納得感あるので参考にしたい
あとは記事の文末にあるようにPromise.all()
での本来のエラー検知が遅くなってしまう場合があるのでそれをどう考えるか
例外の使い所
@t_wadaさんのスライド
例外は「例外的状態のときだけ使う」もの
空文字チェックなどで例外にするのは過剰防衛なので例外と失敗を使い分ける
そのためには契約による設計を行い、契約を満たさないもの(失敗)を定義し、契約にない予想外ものを例外処理とする
他参考
https://speakerdeck.com/twada/php-conference-2016
http://joeduffyblog.com/2016/02/07/the-error-model/
https://yosuke-furukawa.hatenablog.com/entry/2021/12/24/145027
seasar2/NotFoundRuntimeException.java at master · seasarorg/seasar2 · GitHub