Java 12 привносит новый вариант использования оператора switch
. В случаях, если нам нужно сделать присвоение какой-либо переменной в зависимости от нужного условия в case
, мы можем использовать новый синтаксис.
Как мы писали на Java конструкции с оператором switch? Примерно так:
public class SwitchOperatorOld { public static void main(String[] args) { // Так было до Java 12 Weekdays weekday = FRIDAY; String typeOfDay; switch (weekday) { case MONDAY: case TUESDAY: case WEDNESDAY: case THURSDAY: case FRIDAY: typeOfDay = "будний день"; break; case SATURDAY: case SUNDAY: typeOfDay = "выходной день"; break; default: throw new IllegalStateException("Неизвестный день недели!" + weekday); } System.out.println(weekday.getName() + " это " + typeOfDay); } }
public enum Weekdays { MONDAY("Понедельник"), TUESDAY("Вторник"), WEDNESDAY("Среда"), THURSDAY("Четверг"), FRIDAY("Пятница"), SATURDAY("Субботу"), SUNDAY("Воскресенье"); private final String name; Weekdays(String name) { this.name = name; } public String getName() { return name; } }
Как видите, множество значений в строках case
существенно увеличивают общую высоту блока switch
, снижая читаемость и повышая вероятность допустить ошибку при поддержке такого кода.
С новым синтаксическим сахаром в виде упрощённого оператора switch мы теперь можем писать куда более простые и удобочитаемые конструкции:
public class SwitchOperatorNew { public static void main(String[] args) { // Нововведение в Java 12 Weekdays weekday = FRIDAY; String typeOfDay = switch (weekday) { case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "будний день"; case SATURDAY, SUNDAY -> "выходной день"; default -> throw new IllegalStateException("Неизвестный день недели!" + weekday); }; System.out.println(weekday.getName() + " это " + typeOfDay); } }
Заметьте, что теперь мы маппим одно или несколько сравниваемых значений сразу на возвращаемое значение, упраздняя использование оператора break
. А это, в свою очередь, снижает вероятность допустить ошибку.
Также мы можем использовать сразу несколько сравниваемых значений в блоке case
, что повышает читаемость кода. Ведь мы может использовать несколько значение в одну строку и не раздувать тем самым код по высоте.
Новый синтаксис оператоа switch
в Java 12 позволяет писать более краткий код. При этом читаемость нисколько не снижается, а наоборот — улучшается.