varの制限
varを使えない場所を学びます
「varの制限」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
var にはルールがある
var は便利ですが、使用には制限があります。初期化子を持つローカル変数にのみ使用できます。使用できない場所を知っておくと、わかりにくいコンパイルエラーを避けられます。
ローカル変数のみ
var はローカル変数(メソッドやループなどの内部)のみに使用できます。以下の例が有効なのは、変数がローカル変数だからです。
public class Main {
public static void main(String[] args) {
var greeting = "OK for locals";
System.out.println(greeting);
}
}フィールドには使用不可
クラスのフィールドに var は使用できません。フィールドでは明示的に型を宣言する必要があります。ここでの count は通常のフィールドです。
public class Main {
static int count = 0;
public static void main(String[] args) {
count = 5;
System.out.println(count);
}
}メソッドの引数には使用不可
メソッドの引数には明示的な型が必要です。引数リストでは var を使用できないため、このメソッドでは String name と直接宣言しています。
public class Main {
static void greet(String name) {
System.out.println("Hi " + name);
}
public static void main(String[] args) {
greet("Lee");
}
}戻り値の型には使用不可
メソッドの戻り値の型に var を指定することはできません。明示的に指定する必要があります。コンパイラーは戻り値の型を推論しません。
public class Main {
static int square(int x) {
return x * x;
}
public static void main(String[] args) {
System.out.println(square(6));
}
}初期化子が必須
値を指定せずに var x; と記述することはできません。初期化子がなければ、コンパイラーは何から型を推論すればよいかわからないためです。必ずその場で値を代入してください。
public class Main {
public static void main(String[] args) {
var ready = true;
System.out.println(ready);
}
}null は初期化子に使用不可
var x = null; が失敗するのは、null に特定の型がないためです。代わりに、空文字列のような型付きの値を指定してください。
public class Main {
public static void main(String[] args) {
var text = "";
text = "now has a value";
System.out.println(text);
}
}配列初期化子の省略構文には使用不可
var nums = {1, 2, 3}; と記述することはできません。中括弧による省略構文には、宣言された配列型が必要です。代わりに new int[]{...} を使用してください。
public class Main {
public static void main(String[] args) {
var nums = new int[]{1, 2, 3};
System.out.println(nums.length);
}
}予約語ではない
興味深いことに、var はキーワードではなく、予約された型名です。それでもクラスを var という名前にすることはできませんが、このルールの範囲は限定されています。実際には、最新の構文と同じように扱うとよいでしょう。
public class Main {
public static void main(String[] args) {
var var2 = "identifiers can contain var";
System.out.println(var2);
}
}対象型なしのラムダ式には使用不可
型指定のないラムダ式を var に代入することはできません。ラムダ式から型を推論するには、対象となる関数型インターフェースが必要だからです。インターフェースの型を明示的に宣言してください。
import java.util.function.IntUnaryOperator;
public class Main {
public static void main(String[] args) {
IntUnaryOperator doubler = x -> x * 2;
System.out.println(doubler.applyAsInt(21));
}
}制限事項のまとめ
使用範囲を覚えておきましょう。ローカル変数に限られ、初期化が必須です。null、型指定のないラムダ式、中括弧による配列の省略構文には使用できず、フィールド、引数、戻り値の型にも使用できません。
public class Main {
public static void main(String[] args) {
var ok = 42;
System.out.println("var is for locals: " + ok);
}
}確認問題
次のうち、var の正しい使用例はどれでしょうか。
まとめ
var の制限について学びました。
- 初期化子を持つローカル変数にのみ使用できます
- フィールド、引数、戻り値の型には使用できません
nullや型指定のないラムダ式からは推論できません- 配列の中括弧による省略構文は使用できません
- キーワードではなく、予約された型名です
よくある質問
「varの制限」レッスンは無料ですか?
はい。「varの制限」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「varの制限」で何を学びますか?
varを使えない場所を学びます ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「varの制限」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。