МОДУЛЬ 3 · УРОК 5
switch: современный и классический
Когда нужно сравнить одну переменную со множеством значений — цепочка if/else if становится громоздкой. switch — компактная и читаемая альтернатива. А в современной Java (14+) switch стал ещё мощнее.
⏱ ~20 минут
🎓 Для начинающих
📌 Модуль 3
📋 Классический switch с break
Классический switch сравнивает переменную со значениями. Каждый case — это возможное значение:
public class ClassicSwitch {
public static void main(String[] args) {
int day = 3;
switch (day) {
case 1:
System.out.println("Понедельник");
break;
case 2:
System.out.println("Вторник");
break;
case 3:
System.out.println("Среда");
break;
case 4:
System.out.println("Четверг");
break;
case 5:
System.out.println("Пятница");
break;
case 6:
System.out.println("Суббота");
break;
case 7:
System.out.println("Воскресенье");
break;
default:
System.out.println("Неверный день");
break;
}
}
}
Важные моменты:
break— обязателен! Без него выполнение «проваливается» в следующий case (fall-through)default— необязательный, аналог else. Выполняется если ни один case не подошёл- Сравнение идёт по значению переменной
// Fall-through без break:
int num = 2;
switch (num) {
case 1:
System.out.println("Один");
// break пропущен — выполнение продолжится!
case 2:
System.out.println("Два");
// break пропущен!
case 3:
System.out.println("Три");
break;
}
// Выведет: Два, Три (оба case выполнятся!)
🚫 Всегда ставьте break! Fall-through — редко нужен и часто является ошибкой. Если вам нужен fall-through — добавьте комментарий.
🏹 switch-выражения (Java 14+)
Новый синтаксис с оператором -> и yield. Без break, без fall-through, компактнее:
public class ModernSwitch {
public static void main(String[] args) {
int day = 3;
String name = switch (day) {
case 1 -> "Понедельник";
case 2 -> "Вторник";
case 3 -> "Среда";
case 4 -> "Четверг";
case 5 -> "Пятница";
case 6, 7 -> "Выходной"; // Несколько значений!
default -> "Неверный день";
};
System.out.println(name); // Среда
// С блоком кода и yield:
String parity = switch (day) {
case 2, 4, 6 -> "чётный";
case 1, 3, 5, 7 -> "нечётный";
default -> "неверный";
};
System.out.println("День " + day + " — " + parity);
}
}
Преимущества нового синтаксиса:
- Нет
break— каждый case отдельный - Нет fall-through — компилятор поймает забытый case
switchможет быть выражением (возвращать значение)- Несколько значений через запятую:
case 6, 7 ->
🎯 Когда switch лучше if-else
- Когда сравниваете одну переменную со множеством значений
- Когда >3 вариантов — switch чище
- Для enum-значений — switch идеален
- Для строк (Java 7+) — тоже работает
if-else лучше, когда:
- Условия сложные (диапазоны, комбинированные проверки)
- Нужно сравнить разные переменные
- Нужны boolean-операторы (&&, ||)
📝 Строка в switch
public class StringSwitch {
public static void main(String[] args) {
String command = "start";
switch (command) {
case "start":
System.out.println("Запуск");
break;
case "stop":
System.out.println("Остановка");
break;
case "restart":
System.out.println("Перезапуск");
break;
default:
System.out.println("Неизвестная команда");
}
}
}
Switch по строкам сравнивает через equals() (не через ==). Это безопасно.
✅ Итоги урока
- Классический switch:
case значение: ... break; - Современный switch (Java 14+):
case значение -> результат; - Всегда ставьте break (классический) или используйте -> (современный)
- switch по строкам и enum работает с Java 7+
- Несколько значений:
case 6, 7 -> "Выходной"; - switch может быть выражением и возвращать значение
Далее: Практика — калькулятор на условиях →
Проверяем понимание
3 вопроса