switch в Java сможет возвращать значения

Вчера на сайте OpenJDK появился новый JEP 325, в котором предлагается ввести в язык улучшенный оператор switch. Мотивацией для введения является то, что старый switch имеет несколько фундаментальных изъянов, которые нельзя исправить, не нарушив обратную совместимость. Во-первых, старый switch является императивной конструкцией, которая не может возвращать выражения и заставляет писать большое количество повторяющегося кода. Во-вторых, старый switch всегда являлся большим источником ошибок из-за своей необходимости явно завершать ветви оператором break, отсутствие которого приводит к «проваливанию» (fall-through). Кроме того, старый switch не имеет возможности обработать случай, когда аргумент является null.

Новый switch решает все вышеописанные проблемы: он может возвращать значения, сокращает объём необходимого кода, меньше провоцирует на ошибки и позволяет обрабатывать null.

В новом switch оператор break сможет возвращать значения:

case LABEL: break expression;

Того же самого эффекта также можно достигнуть с использованием более короткой формы:

case LABEL -> expression;

Ветви switch будут поддерживать множественные варианты:

case SATURDAY, SUNDAY -> "weekend";

Обработка null:

case null -> expression;

Кроме всего прочего, новый switch упразднит необходимость явного написания ветви default, если он покрывает все возможные значения перечисления:

int numLetters = switch (day) { // DayOfWeek day
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY -> 7;
    case THURSDAY, SATURDAY -> 8;
    case WEDNESDAY -> 9;
}

JEP 325 является только началом, и в дальнейшем планируется добавить в switch поддержку полноценного паттерн-матчинга.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2020