[Java] Switch Expression


🕹 Switch Expression

switch文と式に拡張
JDK 12,13ではpreviewが提供され、JDK 14では標準が提供される.
JEP 361 Switch Expressions

コードで比較する


Before

switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
(MONDAYFRIDAYSUNDAY)と(THURSDAYSATURDAY・)は、同じ処理を行うために連続した位置にある.
重複コードが生成される(casebreakSystem.out.println).
int numLetters;
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        numLetters = 6;
        break;
    case TUESDAY:
        numLetters = 7;
        break;
    case THURSDAY:
    case SATURDAY:
        numLetters = 8;
        break;
    case WEDNESDAY:
        numLetters = 9;
        break;
    default:
        throw new IllegalStateException("Wat: " + day);
}
numLetters変数を先に宣言するswitchゲートが割り当てられている

After

switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
同様に扱う(MONDAYFRIDAYSUNDAY)と(THURSDAYSATURDAY)を一体化している.
使用break無分別、使用->各条件に合ったコードを書き出します.
int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};
numLetters変数を宣言する場合、switch式を用いて初期化した.

Final

System.out.println(
	switch (day) {
    	case MONDAY, FRIDAY, SUNDAY -> 6;
    	case TUESDAY                -> 7;
    	case THURSDAY, SATURDAY     -> 8;
    	case WEDNESDAY              -> 9;
    }
);
System.out.printlnメソッド内で使用したswitch式.