Assertive Programmingのススメ
しばらくのテーマにしようと思う。
日本語訳すると表明プログラミングかな?何のことを言ってるかというと、要は「もっと石橋をたたきなさいよ!」ということッス。
DbCのAssertionに限った話ではなく、もっと気楽にAssertive Programming Patternを収集したい。
で、最初の話題。
ログ吐いただけで満足すな!
例外のおはなし。握りつぶすのはもちろん論外だけど、世の中の参考書や雑誌で下のようなお手本をよく見かける。
try { foo.bar(); } catch (HogeException e) { log.error(e); // 例外を握りつぶさない!! }
え??そんなんじゃ握りつぶしているのと同じでしょ?
こういうお手本を鵜呑みにして、ログさえ吐けばいいと思っている技術者が結構いる。もちろんログ吐くだけでいいケースもあるとは思うけどそれは稀で、実際はcatchした場合の仕様を常に考えてコードを書かなければダメよん。
ではどうしたらいいかというと、それはやはりその局面の要求&仕様によるわけだ。
最近のWEB系開発なんかだと、例えばSQLExceptionなどプログラム上で復旧させることが難しい場合は、RuntimeExceptionでラップして再throwとかするかな。
try { foo.bar(); } catch (HogeException e) { throw new RuntimeException(e); // 実際はサブクラス作ったり }
このポリシーだと楽だねぇ(ハナからSQLExceptionとかが実行時例外だったらもっと楽だったけど)。まあこれも、盲目的にやったら同じことなんだけど。