あなたならどう書く?

http://d.hatena.ne.jp/takayukis/20090620/1245470183

どういったバイナリが吐き出されるか、といったのが趣旨のエントリだが、実はコードが非常に興味深い。
クローズのタイミングが左右で違うようなのでそこ無視で。

個人的にはこんな感じかな。

{
  String msg = "";
  
  try{
    //処理
  }catch(ExceptionA ex){
    msg = "メッセージA";
    log(msg , ex);
  }catch(ExceptionB ex){
    msg = "メッセージB";
    log(msg , ex);
  }
  MessageBox(msg);
}

つまり、ログはくのは共通化していない。メッセージ出力だけ共通化

ログ見たとき、そのログ出力がどこで行われたかが共通化するとわからなくなってしまう。どこで出力されたかがすぐにわかるのはかなりポイントが高いと思う。

一方でメッセージの処理は共通部分だと流れを見て思ったから。おそらくエラーが出たときそれを表示したいのだなと。個々での処理というわけではないと思う。違いはメッセージだけという処理かと。


[追記]
ちなみに一番重要なのは中括弧によってスタックを1段つんだというところ。どこでも変数の宣言ができるJavaにおいてスコープを抑える意味でこういうのは必須だと思う。変数の使い回しや改修時に意図してないところで使われたとかがないように。そして逆にC言語の場合はどこでも宣言できないからこそ必要になる。処理が大きくなればそのまま別の関数にして移動すればよろしい。コードには流れというものがあるので、流れを止めないために別関数にしないという選択が重要になる。

はず。