forループ内のvar
ループ変数の型を推論します
「forループ内のvar」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
ループでのvar
varは、従来のforループでも拡張for-eachループでも、ループ変数として自然に使用できます。コンパイラはループの文脈から型を推論します。
従来のforループのカウンター
従来のforループでは、varが初期化子からカウンターの型を推論します。ここでのvar i = 0からはintが推論されます。
public class Main {
public static void main(String[] args) {
for (var i = 0; i < 5; i++) {
System.out.println("i = " + i);
}
}
}リストに対するfor-each
拡張forループでは、varがコレクションから要素の型を推論します。ここでは各nameがStringになります。
import java.util.List;
public class Main {
public static void main(String[] args) {
var names = List.of("Ann", "Ben", "Cara");
for (var name : names) {
System.out.println(name);
}
}
}配列に対する for-each
配列でも同じように使用できます。要素の型は配列の型から推論されます。
public class Main {
public static void main(String[] args) {
var scores = new int[]{90, 85, 78};
var total = 0;
for (var s : scores) {
total += s;
}
System.out.println("Total: " + total);
}
}Map のエントリを反復処理する
マップのエントリを反復処理するときは、var を使うことで、冗長な Map.Entry 型を記述せずに済みます。
import java.util.Map;
public class Main {
public static void main(String[] args) {
var ages = Map.of("Ann", 30, "Ben", 25);
for (var entry : ages.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
}
}推論された要素のメソッド
要素の型がわかっているため、ループ内でそのメソッドを呼び出すと、コンパイル時の完全な型チェックを受けられます。
import java.util.List;
public class Main {
public static void main(String[] args) {
var words = List.of("red", "green");
for (var w : words) {
System.out.println(w.toUpperCase() + " (" + w.length() + ")");
}
}
}ネストしたループ
ネストしたループでも var を使用できるため、それぞれのカウンター宣言を短くできます。
public class Main {
public static void main(String[] args) {
for (var i = 1; i <= 3; i++) {
for (var j = 1; j <= 3; j++) {
System.out.print(i * j + " ");
}
System.out.println();
}
}
}カウントダウン
推論される型は初期化子に従うため、減少していくループも同じように動作します。
public class Main {
public static void main(String[] args) {
for (var n = 5; n >= 1; n--) {
System.out.println(n);
}
System.out.println("Liftoff");
}
}long カウンターでの var
long 型のカウンターが必要な場合は、初期化子に long リテラルを使用して、var により幅の広い型が推論されるようにします。
public class Main {
public static void main(String[] args) {
var sum = 0L;
for (var i = 1L; i <= 1000000L; i++) {
sum += i;
}
System.out.println(sum);
}
}ループでの可読性
ループは var を使用するのに特に適した場所です。コレクションや初期化子から型が明らかだからです。コードを簡潔かつ安全に保てます。
import java.util.List;
public class Main {
public static void main(String[] args) {
var temps = List.of(20, 22, 19, 25);
var max = Integer.MIN_VALUE;
for (var t : temps) {
if (t > max) max = t;
}
System.out.println("Max: " + max);
}
}インデックスと値を同時に扱う
インデックス付きの一般的なループと var を組み合わせて、リストから位置と値の両方を読み取れます。
import java.util.List;
public class Main {
public static void main(String[] args) {
var items = List.of("a", "b", "c");
for (var i = 0; i < items.size(); i++) {
System.out.println(i + ": " + items.get(i));
}
}
}確認問題
names が List<String> のとき、for (var name : names) における name の型は何でしょうか。
まとめ
ループでの var の使い方を学びました。
- 一般的なループ:初期化子からカウンターの型を推論します
- for-each:コレクションまたは配列から要素の型を推論します
Map.Entryのような冗長な型の記述を省けますlongのカウンターには long リテラル(例:0L)を使用します- ループは
varを使用するのに最適な場所です
よくある質問
「forループ内のvar」レッスンは無料ですか?
はい。「forループ内のvar」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「forループ内のvar」で何を学びますか?
ループ変数の型を推論します ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「forループ内のvar」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ローカル変数にvarを使う
- varで可読性が向上する場合
- forループ内のvar
- varの制限