UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【JavaScript】例外処理について

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さんのスライド

www.slideshare.net

例外は「例外的状態のときだけ使う」もの

空文字チェックなどで例外にするのは過剰防衛なので例外と失敗を使い分ける

そのためには契約による設計を行い、契約を満たさないもの(失敗)を定義し、契約にない予想外ものを例外処理とする

他参考

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