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