質問: 【c#/java?】try-catchでcatchせずにfinallyは一般的? 普段はjavaを使っているのですが、故あってc#のソースを簡易レビューすることになりました。 c#を始めてそれほど間もない人間の書いたソースなのですが、以下のようなソースをたびたびみかけます。 try { // 処理 } finally { // finally処理 } c#の場合、javaとは異なり全ての例外はjavaで言うところの非チェック例外であると認識しています。(ただし、javaの非チェック例外と同じ扱いをしていいとは思っていませんが......) 呼び出し元に起きうる全ての例外処理を任せるがfinally処理をしたいならば、このような書き方をするのが一般的なのでしょうか。 javaの場合でもこのような書き方ができることは確認しましたが、javaの場合は非チェック例外が起きる=バグであることがほとんどなので、このような書き方をする場面はあまりないように思います。 (もちろんチェック例外もthrowsを書けば同じように書くこともできるとは思いますが、自分ならやらないですし、そのようなソースを見たこともないです) ですので、単に自分がjavaを普段使っているからcatchがないことに違和感を感じるだけなのであれば、この問題はスルーしたいと思います。 c#経験者が周りにいない状況ですので、皆様のお知恵をおかりしたいと思います。よろしくお願いします。
回答: javaの場合ですが、わたしは、よくこの書き方をします。 チェック例外でも、非チェック例外でも、例外処理を呼び出し元に任せるような設計にすることはあると思います。 呼び出された方では、例外の処理方法が決められないようなケースではcatchしないし、その場で処理すべき例外ならcatchするようにします。 例外をcatchするべきかということと、finallyで何らかの回復処理をしなければならないこととは、そもそも別の話なので、finally節だけになることがあるのは、自然なことだと思います。 finallyだけということは、finallyですべきことはあるが、そこでは例外をcatchすべきでないからcatchが無いと考えた方がいいでしょう。 逆に用もないのにcatchするのはよくないです。