javaその2

javaの続き。
FFIは使わんだろうからナシ。
イテレータ関連についても高階関数も遅延評価もないからナシ。

で、例外に関して。
シンタックスは普通だから特筆すべきことはない。
ただし、javaには検査例外があるのが特殊。
以下参照。
http://d.hatena.ne.jp/daisuke-m/20081202/1228221927
http://blogs.msdn.com/b/nakama/archive/2009/01/09/net-java.aspx

.netでは例外は基本的に投げっぱなしー>集約ハンドラで処理
を基本としていたが、javaでは検査例外があるので、そうもいかない。
try-catchを書かないとコンパイルが通らない。
throwsも含めてメソッドシグニチャ(メソッドの仕様)なのだといわれれば納得はできる。
しかし、引用したブログで記述のある業務エラーを例外で表現する方法に関しては反対したい。

理由としては

業務エラーは想定しうるエラーなので、例外処理機構で処理するのは気持ち悪い。

つまり本当の例外、回復不能状態と同じシンタックスで条件分岐、処理を行うのがキモチ悪い。
というだけなのですが。

追記
java7からはRAII的な機能が入ってるってさ。

try ( XXX xx = new XXX() ) {
...
}

で、スコープを抜けるときにリソースの破棄処理が走るそうだ。
XXXに入るクラスはjava.lang.AutoCloseable、java.io.Closeableを実装する必要あり。
ま、C#のusingとだいたい一緒。
あれ?usingってたしか問題あったような・・・
Using ステートメントに関する問題の回避
これだっけ?