逆順処理のリファクタリング例
では「逆順処理を含むコードをレビューで“読みやすくする”ためのリファクタリング例」を紹介します。
例1: 境界条件が分かりにくい for文
悪いコード(レビューで指摘されやすい)
for (int i = list.size() - 1; i > 0; i--) {
System.out.println(list.get(i));
}
Java- 問題点:
i > 0だとlist.get(0)が出力されない - レビューコメント例: 「境界条件が off-by-one になっている」
良いコード(リファクタリング後)
for (int i = list.size() - 1; i >= 0; i--) {
System.out.println(list.get(i));
}
Java👉 >= 0 にすることで 全要素を確実に処理できる。
例2: foreach で逆順を無理に書こうとする
悪いコード
for (String s : list) {
// foreach では逆順にできないので混乱
}
Java良いコード
List<String> reversed = new ArrayList<>(list);
Collections.reverse(reversed);
for (String s : reversed) {
System.out.println(s);
}
Java👉 意図が明確で、インデックス管理不要。
例3: Stream での境界条件ミス
悪いコード
IntStream.range(0, list.size())
.map(i -> list.size() - i) // ❌ IndexOutOfBounds
.forEach(i -> System.out.println(list.get(i)));
Java良いコード
IntStream.range(0, list.size())
.map(i -> list.size() - 1 - i)
.mapToObj(list::get)
.forEach(System.out::println);
Java👉 size() - 1 - i とすることで 正しい逆順インデックスになる。
例4: 履歴やログの逆順処理
悪いコード
for (int i = logs.size(); i >= 0; i--) { // ❌ IndexOutOfBounds
System.out.println(logs.get(i));
}
Java良いコード
for (int i = logs.size() - 1; i >= 0; i--) {
System.out.println(logs.get(i));
}
Java👉 size() ではなく size() - 1 から開始するのが鉄則。
レビューで褒められるポイント
- 境界条件を正しく書く (
>= 0) - foreach + Collections.reverse で意図を明確に
- Stream では
size() - 1 - iを忘れない - 「最新から処理したい」意図が一目で分かる書き方にする
💡 まとめると、逆順処理は「境界条件の1ズレ」と「無理な書き方」がバグの温床です。
レビューで褒められるのは、シンプルで意図が伝わるコードです。


