式としてのswitch
switchから値を返します
「式としてのswitch」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
文と式
文は処理を実行します。式は値を生成します。最新の Java では switch を式として使えるため、その結果を変数に直接代入できます。
switch の結果を代入する
switch が = の右辺にある場合、各分岐が値を提供します。アロー形式では、-> の後にある値が自動的に返されます。
public class Main {
public static void main(String[] args) {
int day = 6;
String type = switch (day) {
case 6, 7 -> "Weekend";
default -> "Weekday";
};
System.out.println(type);
}
}ブロックの後のセミコロン
switch 式は文の一部となるため、閉じ波かっこの後にセミコロンを付けて終了します。これを忘れると、コンパイルエラーになることがよくあります。
public class Main {
public static void main(String[] args) {
int n = 2;
int doubled = switch (n) {
case 1 -> 2;
case 2 -> 4;
default -> 0;
};
System.out.println(doubled);
}
}網羅性
switch 式では、考えられるすべての値を処理する必要があります。ほとんどの型では、default 分岐を含める必要があります。含めないとコードをコンパイルできません。
public class Main {
public static void main(String[] args) {
int score = 85;
char grade = switch (score / 10) {
case 10, 9 -> 'A';
case 8 -> 'B';
case 7 -> 'C';
default -> 'F';
};
System.out.println(grade);
}
}enum では default は不要
enum のすべての定数を処理している場合、コンパイラーはすべての値を網羅していることを認識できます。そのため、default 分岐は省略できます。
public class Main {
enum Dir { NORTH, SOUTH, EAST, WEST }
public static void main(String[] args) {
Dir d = Dir.EAST;
String label = switch (d) {
case NORTH -> "Up";
case SOUTH -> "Down";
case EAST -> "Right";
case WEST -> "Left";
};
System.out.println(label);
}
}直接 return する
メソッドから switch 式を直接 return できるため、簡潔な検索メソッドを作成できます。
public class Main {
static int sides(String shape) {
return switch (shape) {
case "triangle" -> 3;
case "square" -> 4;
case "pentagon" -> 5;
default -> 0;
};
}
public static void main(String[] args) {
System.out.println(sides("square"));
}
}数値の結果
分岐では、数値を返したり、算術演算を行ったり、メソッドを呼び出したりできます。すべての分岐で、代入先の変数と同じ型の値を生成する必要があります。
public class Main {
public static void main(String[] args) {
int month = 2;
int days = switch (month) {
case 2 -> 28;
case 4, 6, 9, 11 -> 30;
default -> 31;
};
System.out.println("Days: " + days);
}
}結果をその場で使う
switch 式の値は、すぐに使用できます。たとえば、println の呼び出しの中で使うことができます。
public class Main {
public static void main(String[] args) {
int code = 1;
System.out.println("Status: " + switch (code) {
case 0 -> "OK";
case 1 -> "Warning";
default -> "Error";
});
}
}型の一貫性
すべての分岐で、結果の型を一致させる必要があります。ある分岐が int を返し、別の分岐が String を返す場合、コードをコンパイルできません。分岐の型は統一してください。
public class Main {
public static void main(String[] args) {
int n = 3;
double factor = switch (n) {
case 1 -> 0.5;
case 2 -> 1.0;
default -> 1.5;
};
System.out.println(factor);
}
}三項演算子の連鎖を置き換える
1 つの値を複数の結果に対応付ける場合、入れ子になった三項演算子よりも switch 式のほうが読みやすくなることがよくあります。
public class Main {
public static void main(String[] args) {
int rating = 4;
String stars = switch (rating) {
case 1 -> "*";
case 2 -> "**";
case 3 -> "***";
case 4 -> "****";
default -> "*****";
};
System.out.println(stars);
}
}変数と組み合わせる
switch 式の結果は、ほかの値と同じように、さらに計算で使用できます。
public class Main {
public static void main(String[] args) {
int tier = 2;
int discount = switch (tier) {
case 1 -> 5;
case 2 -> 10;
default -> 0;
};
int price = 100 - discount;
System.out.println("Price: " + price);
}
}確認問題
switch 式には、通常 default 分岐を含める必要があるのはなぜですか。
まとめ
switch を式として使う方法を学びました。
- 代入または return ができる値を生成する
- 代入の最後にセミコロンを付ける
- 網羅的でなければならない(通常は
defaultが必要) - すべての定数を処理する enum では
defaultは不要 - すべての分岐で同じ結果の型を使う
よくある質問
「式としてのswitch」レッスンは無料ですか?
はい。「式としてのswitch」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「式としてのswitch」で何を学びますか?
switchから値を返します ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「式としてのswitch」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 矢印形式のswitch
- 式としてのswitch
- yieldキーワード
- 複数ラベルのcase