呑んだくれ改めレッツゴー痛風日記
2004-01-08
_ 続:throw new Exception("foo");が気に入らない
やっぱり僕は気に入らない。で、気に入らない理由をもう1つ。 Exceptionをthrowするってことは、そのメソッドはthrows付きで宣言するってことですよね?そうすると、コーディング時にcatchし忘れる例外がでてきそうな気がしません?
つまり、
public void hoge() throws Exception { try { // IO処理 moge(); } catch (IOException ex) { throw new Exception("foo"); } huga(); }
のようなhogeメソッドがあって、その中でmoge()というメソッドとhuga()というメソッドを呼び出す場合。moge()でIOExceptionが発生するため、それをcatchして独自エラーコードを与えてExceptionをthrowしてみる。当然、hoge()はthrows Exceptionで宣言する。で、例えばhuga()が何らかのExceptionがthrowされるようなメソッドの場合、本来であればmoge()を実行した場合と同様にhuga()で発生する例外もcatchして独自エラーコードを与えてExceptionをthrowしないといけないのだが、それをうっかり忘れていてもコンパイル時にエラーとならないんだよね。
hoge()がthrows Exceptionではなくてthrows FooExceptionみたいな独自例外をthrowする仕組みであれば、上記のようなうっかり忘れちゃうものはコンパイル時に指摘されるからある程度防げるんだけど。
もちろんプログラマが使用するメソッドの仕様充分にを理解してコーディングすればいいのだけれど、やっぱり人為的なミスによる漏れの発生は防げないと思われます。
もしくは、こういう例外の捕まえ漏れはコンパイル時ではなくて単体テストで検知しろ、という意見もあると思われるが、単体テストのテストケースが既に漏れていたら?まぁ、単体のテストケース漏れは普通に考えてだいぶ致命的なのでそこまで心配することもないのかな。
まぁ、いいや。ってか、こういうcatchし忘れって統合開発環境とか使ったらちゃんと指摘してくれるのかな?ここ1年くらいまともにプログラム書いていないから、自分の開発環境も全然整備していなかったり。ちなみに僕の開発環境はMeadow+JDEEです。
_ 今日のお弁当
- 白飯
- 豚肉生姜焼き
- キャベツ千切り
- マヨネーズ入り玉子焼き
マヨネーズ入り玉子焼きは、姉貴からうちのおかんが昔よく弁当に入れてくれて美味しかったと言われて作ってみた。ってか、俺、あんまり記憶がないんだけれど。で、本来は刻んだ紅生姜も入れるのだが、いかんせんうちに紅生姜が無かったので玉子とマヨネーズだけ。
う〜ん、紅生姜MUSTだな。