読者です 読者をやめる 読者になる 読者になる

for で配列とかを処理するときの話

Java で配列やその類のものを for で走査する場合、index が欲しい場合か、拡張 for ループが使えない場合は

for (int i = 0; i < array.length; i++) {
  // something...
}

のようにするのが一般的だと思う。
が、私は普段以下のように書いてる。

for (int i = array.length; 0 <= --i;) {
  // something...
}

これはもちろん走査する場合、つまり処理順が関係ない場合に限る。
なんでこんな書き方をしているかと言うと、理由は 2 つある。

ループ回数の初期化が楽

条件はループ毎に実行されるので、そこであまり重い処理はしたくない。ループ回数の取得が重い場合は

for (int i = 0; i < list.size(); i++) {
  // something...
}

とかやっちゃうと毎回 size() が呼ばれちゃってなんとなく気になる。回避策としては

for (int i = 0, n = list.size(); i < n; i++) {
  // something...
}

って感じで、これはたまーに見かけるけど、私の使ってる方法だといちいち気にしなくて済む。

若干速い

Java には 0 と比較するための専用のバイトコードがあるので、比較をする場合は 0 とやった方が若干速いしバイトコードも削れる。
…細けぇー!

とまあこんな感じで

ものすごく細かい理由でこういう書き方をしている。
私はこの書き方にもう慣れちゃったのでいいんだけど、多分この書き方は一般的ではないと思うので、可読性は落ちるかなぁと思いつつ使ってるのだけど、どうなんでしょう。これパッと見てわかる? そこだけが気掛かり。
あ、ちなみに拡張 for ループが使える場合はそっち使います。やっぱ書いてて楽なので…。