Javaのループ処理には、よく使われる 通常のfor文 と 拡張for文("enhanced for loop")の2種類があります。この記事では、それぞれの特徴や使い方、使い分けについて詳しく解説します。
通常のfor文とは?
通常のfor文は、インデックスを使って配列やリストの要素にアクセスするため、繰り返し処理を細かく制御することができます。具体的には、開始点・終了点・ステップを指定してループを回すことが可能です。
for (初期化; 条件; 更新) {
// 繰り返し処理
}
String[] names = {"shun", "yamashita"};
for (int i = 0; i < names.length; i++) {
System.out.println("名前: " + names[i]);
}
上記の例では、インデックス i を使って配列 names の要素にアクセスしています。配列の長さまでインデックスを1ずつ増やしながらループを回し、各要素を順番に出力しています。
通常のfor文のメリット
- インデックスを使って要素を細かく制御可能
- 特定の範囲やステップを自由に設定できる
- 逆順や飛ばしながら処理することも可能
拡張for文とは?
拡張for文("enhanced for loop")は、Java 5以降で導入された新しいループの構文です。この構文は、コレクション(配列やリストなど)の全要素を1つずつ処理する際に便利です。通常のfor文に比べて、コードがシンプルで読みやすくなります。
コードをコピーする
for (要素の型 変数名 : コレクション) {
// 繰り返し処理
}
コードをコピーする
String[] names = {"shun", "yamashita"};
for (String name : names) {
System.out.println("名前: " + name);
}
この例では、names 配列の各要素を順番に name 変数に代入し、ループ内でそのまま出力しています。インデックスを意識せずに、配列やリストの全要素にアクセスできるのが特徴です。
拡張for文のメリット
- コードがシンプルで可読性が高い
- インデックスを気にする必要がない
- 全要素を順番に処理するのに最適
通常のfor文 vs 拡張for文の比較
項目 | 通常のfor文 | 拡張for文 |
---|---|---|
インデックス | 必要 | 不要 |
柔軟性 | 高い | 低い |
使いどころ | 範囲指定や飛ばし処理など、細かい制御が必要な場合 | シンプルな全要素処理 |
逆順処理 | 可能 | 不可能 |
可読性 | やや複雑 | シンプルで読みやすい |
逆順処理
例: 逆順でのループ
通常のfor文 では、インデックスを操作して逆順に処理が可能です。
String[] names = {"shun", "yamashita"};
for (int i = names.length - 1; i >= 0; i--) {
System.out.println("名前: " + names[i]);
}
拡張for文 では逆順処理はできません。順番に全要素を処理することに特化しています。
どちらを使うべき?
通常のfor文 を使うべき場面
要素にインデックスでアクセスしたい場合
逆順や飛ばし処理など、細かい制御が必要な場合
ループ回数を自由に制御したい場合
拡張for文 を使うべき場面
全要素を順番に処理したい場合
シンプルで可読性の高いコードが求められる場合
インデックスを意識せずに書ける場合
まとめ
拡張for文は、シンプルで全要素を順に処理する際に非常に便利です。一方で、インデックスを使った柔軟な制御が必要な場合は通常のfor文を使います。状況に応じて、これら2つのループ処理を使い分けることで、効率的で読みやすいコードを書くことができます。
参考リンク
公式ドキュメント - Java for文
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html