どこに書こうか迷ったけど、結局ここに書いてみることにします。
C# / Java 言語の概要は最低限知っている人でないと読めない文章です_o_。
****
おいら最近 C# でも書いてますが throws のところは最初に一番気になったところでした。throws 宣言できないなんて欠陥じゃん、みたいな。実際に C# でしばらく書いた上で、再度考えると、確かにこりゃ要らないかもという気がだぃいぶしてきてます。
本当のところは、根っこでのハンドリング方法(UncaughtExceptionHandler)がしっかりしているという前提で、多くの Exception 直径サブクラスを RuntimeException 化し、外部IO に直接絡む IOException のような部分だけをそのまま残すくらいが妥当なのかなと思うのですが、プログラミング工学的に考えるとそんなのは嘘妥協の世界ですが、プログラムの見通しと記述の簡便さは、そういった正当性の話を超越して重要なのかもしれないと、人間は怠け者であるという原則を認識した私としてはよく思うのであります。
端的には、InterruptException やら、ByteArrayIn/OutputStream の IOException はどう考えてもうざいじゃろ、ってなもんですか。
極小だが0でない可能性に全てのプログラマが備える必要があるかというと個人的には「ある」と思うけど、自分で使う範囲で可能性0の例外処理を記述するのは、それをしなくてよい言語で実際に書いてみて面倒なことをしていたというのをやっと実感した感じ。
} catch (IOException e) {
throw new RuntimeException("CANT HAPPEN"); ってね。
}
逆にコンパイラが可能性0であることを判別できないのがおかしいとも言えるわけだけど、InputStream のサブクラスが IOException を投げることがない事、sleep を interrupt するやつがいないことをコンパイラに簡単に教えてあげれればいいということなんだろうか…。
前者については利用者側が ByteArrayInputStream 型を使えば済むんだけどそれはそれで気持ち悪い…。
参考:C#-ML archive より
http://www.users.gr.jp/ml/archive/list.aspx?name=cs&no=300
下のほうの throws というスレッド。
これを見つけたきっかけは、最近の C#-ML での川俣さんの発言より、です。
