Java13プレビュー機能「拡張switch」を試す
まだプレビュー機能なので、デフォルトでは有効ではないが(有効にするには、JVM起動オプションに –enable-preview が必要)、Java13から「switch」が文(statement)だけではなく式(expression)としても使えるようになったので、試してみる。
1.switch文(case …:)
従来の書き方。フォールスルーするので、break文が必要。
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; }
2.switch文(case … ->)
switch文の別の書き方として「:」の代わりに「->」を書くと、フォールスルーせず、break文は不要。
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); }
複数文を記述したい場合は「{}」で括る。
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); System.out.println(10); } }
3.switch式(case …:)
式としてswitchを使う場合は、yieldで値を返す必要がある。
System.out.println(switch (day) { case MONDAY, FRIDAY, SUNDAY: yield 6; case TUESDAY: yield 7; case THURSDAY, SATURDAY: yield 8; case WEDNESDAY: yield 9; });
フォールスルーするので、以下の書き方も可能。
System.out.println(switch (day) { case MONDAY: case FRIDAY: case SUNDAY: yield 6; case TUESDAY: yield 7; case THURSDAY: case SATURDAY: yield 8; case WEDNESDAY: yield 9; });
4.switch式(case … ->)
式でも「->」が使える。この場合は、yieldの省略が可能。
System.out.println(switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; });
複数文を記述する等「{}」を使う場合は、明示的にyieldを書く必要がある。
System.out.println(switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> { System.out.println("(WEDNESDAY)"); yield 9; } });