タイトルは "To check, or not to check?" の嘘訳 ;-)です。

Javaの理論と実践: 例外をめぐる議論

あるあるあるある、と頷きたくなるような内容。

チェック済み例外のみを使うのは当初思われていた程には良い考えではない
チェック済み例外が、多くの大プロジェクトで重大な問題の元になる
Java技術を使っての経験が絶対的に豊富なはずのC#の設計者達はC#の言語設計からチェック済み例外を無くすという選択をし、全ての例外をチェックなし例外にしています。

旧来のC言語でも「関数がエラーを返さないかチェックせよ」みたいなことを言われてたような。でも、プログラマは怠惰なので、さぼっちゃう。では、さぼれないように、エラーチェックを強制的にさせようというのが Java の 「チェックしなければならない例外」だと思うんだけど。

ユーザー・プロファイルをロードするのが仕事のメソッドは、ユーザーが見つからない時にはNoSuchUserExceptionを投げるべきであって、SQLExceptionを投げるべきではありません。SQLExceptionを投げてしまうと、呼び出し側はユーザーが見つからないことは分かるかも知れませんが、SQLExceptionをどうすべきかが分かりません。下にある失敗の詳細(例えばスタック・トレースなど)を投げ出すことなく、より適切な例外を投げるためには例外チェーンを使います。
呼び出し側はメッセージ・テキストを構文解析するという、許し難い罪悪を犯さない限り、こうした様々に異なるSQLExceptionを区別することができません。

適切にチェーンさせるのは大変。それに、エラーの本当の原因が必要になったときにも面倒。(といっても、そのまま投げるわけにはいかないし、どうすりゃいいの?)

例外の飲み込み

周囲では「例外を握り潰す」と皆そんな表現を使ってた。

例外を捉えてみたらcatchブロックの中に何もない

あぁ、もうマジで。頼むから原因を隠しちゃって、「何が起きたかわからないけど、うまく動作しない」という状況を作るのは勘弁。せめて、スタックトレースでも吐いてくれ(いや、本当は例外を投げるなりして)。

例外ラッピングが多すぎる

どうにもならない(--;

・原文: Java theory and practice: The exceptions debate

・ちょうどいま読んでいたりする 実践J2EE システムデザイン にもこの話題がでていた。

・以前にも同じネタを…… [Java]CheckedException不要論

追記: 2005-03-18

参考: [Java]swallow catch

tags: Java zurazure

Posted by NI-Lab. (@nilab)