MikkaBozuException
今週15日に発売の「スッキリわかるJava入門 第3版」について、思いつきで始めた「ひとりカウントダウン」、三日坊主のくせして4日目を迎えるという例外的状況に突入しているものの、JVMクンにトライもキックもしてもらえない著者中山です。(3日目の記事はこちら)。
それにちなんで、4日目は例外の章に新たに加わったtry-with-resourcesの解説について紹介しようかと思います。
史上最長のtry-with-resources解説(俺調べ)
Javaを既に学び終えて現場でご利用という方には、ご存じの方も多いであろうtry-with-resources文。Java7から導入された構文ではあるのですが、スッキリわかるJava第2版の出版当時、悩んだ末に入れそびれてしまっていたものです。
そして今回のJava3版にあわせて、満を持してtry-with-resourcesの解説が入りました!
まぁただの構文ですから、Javaの入門書であればどの本も、だいたいこんな感じかと思います。
・
・
・
スッキリJava以外は!
スッキリJava第3版のtry-with-resourcesは、なんとこの構文紹介の前に6.5ページもの解説が入ります。
1つの構文にそんなにページかけて、いったい何を解説しているかというと、
「ファイルやデータベース処理を書こうとおもったら怒られ、仕方ないからtryで囲ったらこんどはスコープ外だからとfinallyの中でcloseできず、仕方なく変数宣言をtryの前に出したはいいものの、finallyのなかでさらにtrycatchしろと怒鳴られ、そのくせcatchしてもできること特にないし、やっとコンパイルエラー消えたとおもったら閉じるときにnull判定してなかったからオープン失敗時にclose呼ばれてぬるぽ。」
問題ッ!1
「あー、あれウザいよねぇ...」「新人さんとか、ガンガンハマるよねぇ...」っていう声が聞こえてきます。それを、ちゃんと一つずつ理由を添えて解説しつつ、try-catch-finallyをなおしていく流れを6ページにわたり紹介した上で、最後に、「ま、try-with-resources使ったら一発やけどね。」っていう説明となっているんです。
現場に「残りやすい」旧構文
なぜこの解説を入れたかというと、try-catch-finallyによって作られているソースコードを見る機会はこれからも多分にあると想像したからなんです。
もちろん、新しく作られているシステムってtry-with-resourcesを使えばいいんですが、結構以前からメンテナンスされているシステムって、try-catch-finallyで長く複雑に書かれているものも多いと思うんですね。
そして、例外処理なんていうミスしたら死ぬところを、旧構文が廃止されてないにも関わらずあえて新構文にかきかえるなんていうことは、t-wadaの教えを直接受けつつ整備した自動テストでもないかぎり、「んー、怖ぇな。」って感じるのがフツーの人の神経だと思います。
同様の理由で、社内ルールとかで規制されない限り、例外処理というクリティカルな場所ではあえて使い慣れたtry-catch-finallyを使いたいという人も多いと思うんですよね。だから、この「いけてない多重try-catch」は、自然淘汰の速度が遅い、わりと「現場に残りやすい旧構文」なはずなんです。
旧構文の闇深い知識がなく、「ひゃっほーい!」とtry-with-resourcesを使おうとしてミスりしたらもう目も当てられませんから、この旧構文は理由も含めてしっかり把握しておくことは命を守ることに繋がると思ったんです。
ということで、抽象クラス同様に、例外処理でも湊くんの受難が待ち受けるスッキリJava第3版を、どうぞよろしくお願いします!