例外は必要か?
#例外 #例外処理
タイトルが間違ってる?
例外システムをtry~catchですべきかEitherですべきかという話っぽい
例外は必要か?というタイトルだと文脈が読み取れないので変えた方が伝わりやすい気がしますMijinko_SD.icon
ai.icon
try ... catchによる例外処理とEither型による例外処理の比較について、星取表を作成し、それぞれの特徴を説明します。
table:比較表
特徴 try~catch Either型
処理の流れの明確さ ★☆☆ ★★★
非同期プログラミングとの相性 ★☆☆ ★★★
型チェックの適用 ★☆☆ ★★★
値としての扱いやすさ ★☆☆ ★★★
関数型プログラミングとの相性 ★☆☆ ★★★
副作用を持つ関数での使用 ★★★ ★☆☆
## 説明
1. try~catchによる例外処理:
- 処理の流れが分かりにくくなる傾向があります[1]。
- 非同期プログラミングでの扱いが難しいです[1]。
- 型チェックが動作しないため、コンパイル時のエラー検出が困難です[1]。
2. Either型による例外処理:
- 処理の流れが明確で、エラーを値として扱えるため、後で処理することが可能です[4]。
- map や flatMap などの操作を使用でき、関数型プログラミングと相性が良いです[4]。
- 型チェックが適用されるため、コンパイル時にエラーを検出しやすくなります[1]。
Either型を使用する場合、Lintツールを活用することで、正しく例外処理されていない箇所を警告することができます。例えば、return-type/enforce-access というESLintルールを使用すると、特定の型(この場合はEither型のエラー)が使用されずに捨てられている箇所を検出できます[3]。
これにより、開発者はエラーハンドリングの漏れを早期に発見し、より堅牢なコードを作成することができます。Either型と適切なLintルールを組み合わせることで、例外処理の品質を向上させることができるでしょう。
Citations:
[1] https://blog.mamansoft.net/2019/03/26/typescript-exception-with-either/
[2] https://qiita.com/xkent/items/7de92b10ffbcb2b7a257
[3] https://zenn.dev/knowledgework/articles/7ff389c5fe8f06
[4] https://qiita.com/koher/items/288f01cddb0bbb6aa4e1
[5] https://blog.shibayu36.org/entry/2015/08/31/103000
[6] https://blog.flutteruniv.com/flutter-fpdart-either/
[7] https://qiita.com/shwld/items/f5f192ace0702d9156e2
例外のない言語
C言語
golang
haskell