ほげにっき

hogedigoの日記

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とかが実行時例外だったらもっと楽だったけど)。まあこれも、盲目的にやったら同じことなんだけど。