Java | インクリメント/デクリメントを使わずに済ませる、よりモダンで安全な書き方

Java Java
スポンサーリンク

インクリメントを使わないモダンな書き方

では「インクリメント/デクリメントを使わずに済ませる、よりモダンで安全な書き方」を紹介します。


1. 拡張 for文(foreach)

配列やリストを順番に処理するなら、インデックス管理すら不要。

List<String> names = List.of("Alice", "Bob", "Charlie");

for (String name : names) {
    System.out.println(name);
}
Java
  • メリット: インクリメント不要、範囲外アクセスの心配なし
  • 実務で褒められるポイント: 「シンプルで安全」「意図が明確」

2. Iterator を使う

コレクションを順番に処理する標準的な方法。

List<Integer> numbers = List.of(10, 20, 30);
Iterator<Integer> it = numbers.iterator();

while (it.hasNext()) {
    System.out.println(it.next());
}
Java
  • メリット: インクリメント不要、内部で安全に次の要素へ進む
  • 実務で褒められるポイント: 「コレクション操作に強い」「削除操作も安全にできる」

3. Stream API(Java 8以降)

より宣言的に「何をしたいか」を書ける。

List<String> names = List.of("Alice", "Bob", "Charlie");

names.stream()
     .filter(n -> n.startsWith("A"))
     .forEach(System.out::println);
Java
  • メリット: インクリメントやループ制御を意識しなくてよい
  • 実務で褒められるポイント: 「モダンで読みやすい」「並列処理にも対応」

4. IntStream.range を使う

インデックスが必要な場合でも、インクリメントを直接書かずに済む。

List<String> names = List.of("Alice", "Bob", "Charlie");

IntStream.range(0, names.size())
         .forEach(i -> System.out.println(i + ": " + names.get(i)));
Java
  • メリット: 境界条件ミス(<= と < の間違い)を防げる
  • 実務で褒められるポイント: 「境界条件が明確」「バグが入りにくい」

5. forEach メソッド

コレクションに直接処理を渡す。

List<Integer> numbers = List.of(1, 2, 3);

numbers.forEach(n -> System.out.println(n * 2));
Java
  • メリット: インクリメント不要、ラムダ式で直感的
  • 実務で褒められるポイント: 「簡潔で意図が伝わりやすい」

まとめ

  • foreach → インデックス不要なら最適
  • Iterator → コレクションを安全に操作
  • Stream API → 宣言的でモダンな書き方
  • IntStream.range → インデックスが必要でも安全
  • forEach → コレクションに直接処理を渡せる

💡 実務では「インクリメントを正しく使えるか」よりも「インクリメントを書かなくても済む方法を選べるか」が評価されます。
つまり、“インクリメントを隠す”のがモダンJavaの流儀なんです。

タイトルとURLをコピーしました