Java - Выражения Switch

Привет, будущие программисты Java! Сегодня мы погрузимся в одну из самых захватывающих функций, введенных в Java 12 и улучшенных в Java 14: Выражения Switch. Как ваш добрый сосед-преподаватель информатики, я здесь, чтобы провести вас через это путешествие, даже если вы ни разу не написали ни одной строки кода. Так что пристегнитесь и начнем!

Java - Switch Expressions

Что такое Выражения Switch?

Прежде чем перейти к выражениям switch, давайте немного отклонимся, чтобы понять, что такое оператор switch. Представьте себе, что вы находитесь в магазине мороженого, и в зависимости от выбранного вами вкуса, вы получаете различные топпинги. Вот почти что самое, что делает оператор switch в программировании — он позволяет вам выполнять различные коды в зависимости от различных условий.

Теперь выражения switch берут эту концепцию и делают ее еще более мощной и краткой. Они позволяют нам рассматривать весь блок switch как выражение, которое может возвращать значение. Это как обновление от обычного мороженого до роскошного сандей!

Старый способ: Традиционные операторы Switch

Начнем с традиционного оператора switch, чтобы увидеть, как мы раньше делали это:

String day = "ПОНЕДЕЛЬНИК";
String typeOfDay;

switch (day) {
case "ПОНЕДЕЛЬНИК":
case "ВТОРНИК":
case "СРЕДА":
case "ЧЕТВЕРГ":
case "ПЯТНИЦА":
typeOfDay = "Рабочий день";
break;
case "СУББОТА":
case "ВОСКРЕСЕНЬЕ":
typeOfDay = "Выходной";
break;
default:
typeOfDay = "Неверный день";
}

System.out.println(typeOfDay);

В этом примере мы определяем, является ли день рабочим или выходным. Обратите внимание, как мы используем операторы break, чтобы предотвратить падение, и как мы должны объявить typeOfDay вне блока switch.

Новый способ: Выражения Switch

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

String day = "ПОНЕДЕЛЬНИК";
String typeOfDay = switch (day) {
case "ПОНЕДЕЛЬНИК", "ВТОРНИК", "СРЕДА", "ЧЕТВЕРГ", "ПЯТНИЦА" -> "Рабочий день";
case "СУББОТА", "ВОСКРЕСЕНЬЕ" -> "Выходной";
default -> "Неверный день";
};

System.out.println(typeOfDay);

Ух ты! Посмотрите, насколько чище и кратчай это. Мы объединили несколько случаев, убрали операторы break и присвоили результат напрямую typeOfDay. Это как уборка в вашей комнате — вдруг все становится аккуратным иordonным!

Использование выражений Switch с метками "case L ->"

Синтаксис стрелки (->) — это ключевая особенность выражений switch. Он позволяет нам предоставить краткий способ указания метки случая и связанного с ним действия. Давайте рассмотрим другой пример:

int dayNumber = 3;
String dayName = switch (dayNumber) {
case 1 -> "Понедельник";
case 2 -> "Вторник";
case 3 -> "Среда";
case 4 -> "Четверг";
case 5 -> "Пятница";
case 6 -> "Суббота";
case 7 -> "Воскресенье";
default -> "Неверный номер дня";
};

System.out.println("День " + dayNumber + " — " + dayName);

В этом примере мы конвертируем номер дня в его соответствующее имя. Синтаксис стрелки делает каждый случай одной, легкой для чтения строки. Это как указатели, направляющие прямо к правильной ответе!

Использование выражений Switch с метками "case L:" и оператором yield

Иногда вам может потребоваться выполнить несколько действий в вашем выражении switch. Вот тут приходит на помощь оператор yield. Это как сказать: "Я закончил свои вычисления, вот итоговый ответ!"

Рассмотрим пример:

int month = 8;
String season = switch (month) {
case 12, 1, 2:
yield "Зима";
case 3, 4, 5:
yield "Весна";
case 6, 7, 8:
yield "Лето";
case 9, 10, 11:
yield "Осень";
default: {
String message = "Неверный месяц: " + month;
System.out.println(message);
yield "Неизвестно";
}
};

System.out.println("Сезон для месяца " + month + " — " + season);

В этом примере мы определяем сезон на основе месяца. Обратите внимание, как мы используем yield, чтобы вернуть значения, особенно в default случае, где мы выполняем немного больше обработки.

Продвинутое использование: Выражения в метках случая

Одной из самых крутых функций выражений switch является возможность использования выражений в метках случая. Это как дать вашему оператору switch суперсилу! Вот пример:

record Person(String name, int age) {}

Person person = new Person("Алиса", 25);

String lifeStage = switch (person) {
case Person p when p.age() < 13 -> "Ребенок";
case Person p when p.age() >= 13 && p.age() < 20 -> "Подросток";
case Person p when p.age() >= 20 && p.age() < 60 -> "Взрослый";
case Person p when p.age() >= 60 -> "Пожилой";
default -> "Неизвестно";
};

System.out.println(person.name() + " — " + lifeStage);

В этом примере мы используем record (еще одну крутую функцию Java) для представления человека, а затем используем выражения switch с сложными условиями, чтобы определить их жизненный этап. Это как иметь личного жизненного коуча в вашем коде!

Заключение

Выражения switch — это мощное инструмент в Java, который может сделать ваш код более читаемым, кратким и менее подверженным ошибкам. Это как обновление от флоп-фона к смартфону — вдруг вы можете сделать гораздо больше с меньшим усилием!

Помните, программирование — это все о практике. Так что не бойтесь экспериментировать с этими концепциями. Попробуйте создать свои собственные выражения switch, играйтесь с различными сценариями и, что самое важное, наслаждайтесь этим процессом!

По мере нашего завершения, вот таблица, подводящая итог ключевых методов, о которых мы говорили:

Метод Описание
-> Синтаксис стрелки для кратких меток случая и действий
yield Оператор для возврата значения из выражения switch
case L when condition Паттерн-совпадение в метках случая

Счастливого кодирования, и пусть ваши switch всегда выражают себя четко!

Credits: Image by storyset