いろいろと考えて

母「もしもあなたに生き別れの19歳の義妹(美人で巨乳)がいて、突然あなたと同居することになったらどうする?」
僕「例外をスローします*1
…さて、今日の議題はC++Javaだけでなく、OCamlにさえも付いている驚きの例外機構の話です(例によってISer以外には分からない話ですね。恐縮です)。
僕は長いことC言語ばかりを使っていたのが悪かったのか、エラーが起きたとき場合も、返値に以上を意味するデータを入れることで代用してしまいます。
(たとえばメモリの確保するときには、

char* p = (char*)malloc(1024);
if (p == NULL)
return -1;

とリターンするように書きます)。
これでも別に問題があるわけではなかったのですが、例外処理を使ったほうがいい場合には積極的に使おうと思った出来事がありました。
id:letter:20050615で書いた書庫内画像閲覧ソフトでは、「メモリ上に圧縮データを展開して返す」というメソッドを実行しています。ところがこれは「書庫が壊れていたり」、「パスワードで保護」されていたり、「メモリが足りなかった」場合には、全てNULLが返ってくるだけでその原因を知ることができません。そこでエラーが発生したときにはそのエラーを保存した例外をスローすれば、どんなエラーが起きたのかがわかる、というわけです。せっかくObjective-Cにも例外機構がある(http://developer.apple.com/ja/documentation/cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_9.html#//apple_ref/doc/uid/20001424/BCIGHBBA)のですから、使えないというのも恥ずかしいし。
突然例外に目覚めたのは昨日というわけではなく、C言語なのになぜか例外処理を行っていた*2某氏のサーバのソースを見たからだったりするわけですが、まぁよいものはどんどん真似していかないとね。

*1:throw new LifetimeException("Marude Galge-noyouda");

*2:setjmp,longjumpを使った擬似的な例外機構らしいです