変数の宣言位置はスコープで決める

ループ内のみで使う変数の宣言位置について。


■A

for (Map<String, String> map : list) {
  String var = map.get(KEY);
  .
  .
  .
}

とするか、


■B

String var;
for (Map<String, String> map : list) {
  var = map.get(KEY);
  .
  .
  .
}

とするか。


半刻ほど調べた結論としては、中に入れるべき(Aがベター)のようです。


理由としては、

  • 変数の宣言だけなら、ほとんど全くパフォーマンスに影響しない
  • 最近のJavaコンパイラは、Aで書いてもBに変換してくれる
  • Aの方が人間にとって(スコープが狭いため)扱いやすい

といったところ。


ただ、オブジェクトを生成している場合(右辺が new なんたら)や思い処理を行っている場合は、可能な限り外に出すことが望ましいです。ループの継続判定部分なんかは見落としがちなので注意しましょうっ。



まとめ:ループ内で使う変数の宣言位置はスコープを優先して決める



■参考
codeなにがし::ループの中の変数宣言
http://code.nanigac.com/forum/view/127


ループ内で変数を宣言しない方が良いのか: 雪羽の発火後忘失
http://feather.cocolog-nifty.com/weblog/2010/05/post-a00a.html