世間ではオワコンと揶揄されることも珍しくない Java ですが、Java を初めたばかりのエンジニアがチェック例外と非チェック例外の使い分けについて「ベストプラクティスないの?」と調べたのをまとめてみました。
エントリまとめ
どのエントリも Java についての深い洞察と開発の実践現場での生きた経験をもとに書かれていて大変に勉強になりました *1
エントリ中からリンクされているエントリもぜひ一読されることをおすすめします。
- 検査例外と非検査例外(実行時例外)をどう使い分けるか - Lino Blog
- Java言語のチェック例外は本当にGood Partなのか? - 達人プログラマーを目指して
- Javaのチェック例外はクソ仕様 - やさしいデスマーチ
- 例外の扱いについて その2 - じゅんいち☆かとうの技術日誌
- 「検査例外はアジャイルやオブジェクト指向の考えに反するという事実」について一部誤解あり - じゅんいち☆かとうの技術日誌
- 非検査例外に萌えるわけ - じゅんいち☆かとうの技術日誌
- Throwableについて本気出して考えてみた - 都元ダイスケ IT-PRESS
- Throwableについて本気出して考えてみた 2nd Season - 都元ダイスケ IT-PRESS
- 前提条件を破った場合、どのような挙動をするのか? - 都元ダイスケ IT-PRESS
- 例外について色々と考えてみた - ぐるぐる~
- むかしむかし、あるところにチェック例外という機能があったそうな|システムアーキテクトのごった煮
- Exception Propagation(例外の伝播) - Strategic Choice
- 例外設計における大罪 *2
例外との付き合い方
Java のチェック例外は強力な機能だと思いますが、使いどころが難しいのもまたしかり、です。
素晴らしいエントリの数々を読んだ結果、Java の例外との付き合い方が見えてきました。
例外処理の実践
いろいろな人が (自嘲気味に) 話してくれたりするのはこんなコードです。
Java を5〜6年使っている人でも普通に書くのだそうですが、こうするとなにか嬉しいのですかね…
try { /* 何らかの処理 */ } catch (Exception e) { // YYYY/MM/DD メモ // なぜかコンパイルエラーになる。 // コンパイルエラーを回避するために try 〜 catch 追加 }
お兄ちゃんTry?catchは例外を隠すためにあるんじゃないんだよ?そして、そんなコード書いているとコード読んだ人にお兄ちゃんの都合の悪いことを隠す性格がばれちゃうよ?
性格はともかく、全然関係ないところで問題になりがちですよね。
すぐにやめたいところですが、既に動いているシステムだとなかなか難しいこともあるのでしょう。
"問題なく" *4 動いていればこれもまたアリなのかもしれませんが…