技術開発日記

技術やら日々思ったことを綴ってます。

for文でのIterator

while文でIteratorを使う場合の欠点としてローカル変数(以下の例の場合「it」)の有効範囲が広がるうえに、「it」という変数名が再利用できないといったことがある。
なのでIteratorを使う場合はwhile文じゃなくてfor文の中で使った方がいいよ、っていうことをよく聞いたりする。

While文

Iterator<Item> it = itemList.iterator();
while (it.hasNext()) {
    Item item = it.next();    
}

for文

for (Iterator<Item> it = itemList.iterator(); it.hasNext();) {
    Item item = it.next();    
}


だけど、正直僕は反対だ。
特に理由が無い限りは断然while文で書くべきだと思うし、理想を言えば拡張for文で書くのがベストだと思う。
必要あらばプリミティブ変数を使用したfor文「こんなやつ for (int i = 0; i < 10; i++)」でもいいかも。

というのも、おそらく多くの人もそうだとう思うんだけど、明らかにfor文の方が読みにくい。
一般的なfor文とかなり違うため、間違いがあった場合は気づきにくいし、それよるバグが生まれる可能性も高くなる。
スコープが広くなったりするから、for文の方がいいっていうのも僕は正直あまり重要でない気がする。
それよりも人が読みやすい(可読性が高い)、保守しやすいコードの方がよっぽど大事だと思う。

こんなことはかなり細かいことだし、好みといえば好みなんだけど、とりあえず僕はこういう観点で実装するっていうことを書き留めたかった。

※ちなみにfor文の中でIteratorを回すより、プリミティブ変数を使用したfor文のほうが早いっていつかのWeb+DB Press に書いてあった。