switch как выражение
Возвращайте значения из switch
«switch как выражение» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Операторы и выражения
Оператор выполняет действие. Выражение выдаёт значение. Современная Java позволяет использовать switch как выражение, поэтому его результат можно напрямую присвоить переменной.
Присваивание результата switch
Когда switch находится справа от =, каждая ветка задаёт значение. В стрелочной форме значение после -> возвращается автоматически.
public class Main {
public static void main(String[] args) {
int day = 6;
String type = switch (day) {
case 6, 7 -> "Weekend";
default -> "Weekday";
};
System.out.println(type);
}
}Точка с запятой после блока
Поскольку выражение switch является частью оператора, после закрывающей фигурной скобки ставится точка с запятой. Её пропуск часто приводит к ошибке компиляции.
public class Main {
public static void main(String[] args) {
int n = 2;
int doubled = switch (n) {
case 1 -> 2;
case 2 -> 4;
default -> 0;
};
System.out.println(doubled);
}
}Полнота вариантов
Выражение switch должно охватывать каждое возможное значение. Для большинства типов это означает необходимость включить ветку default, иначе код не скомпилируется.
public class Main {
public static void main(String[] args) {
int score = 85;
char grade = switch (score / 10) {
case 10, 9 -> 'A';
case 8 -> 'B';
case 7 -> 'C';
default -> 'F';
};
System.out.println(grade);
}
}Для перечислений default не нужен
Если в switch по перечислению охвачены все константы, компилятор знает, что варианты исчерпаны. Ветка default становится необязательной.
public class Main {
enum Dir { NORTH, SOUTH, EAST, WEST }
public static void main(String[] args) {
Dir d = Dir.EAST;
String label = switch (d) {
case NORTH -> "Up";
case SOUTH -> "Down";
case EAST -> "Right";
case WEST -> "Left";
};
System.out.println(label);
}
}Непосредственный возврат
Метод может напрямую return выражение switch, что позволяет создавать краткие методы поиска.
public class Main {
static int sides(String shape) {
return switch (shape) {
case "triangle" -> 3;
case "square" -> 4;
case "pentagon" -> 5;
default -> 0;
};
}
public static void main(String[] args) {
System.out.println(sides("square"));
}
}Числовые результаты
Ветки могут возвращать числа, выполнять арифметические операции или вызывать методы. Каждая ветка должна выдавать значение того же типа, что и присваиваемая переменная.
public class Main {
public static void main(String[] args) {
int month = 2;
int days = switch (month) {
case 2 -> 28;
case 4, 6, 9, 11 -> 30;
default -> 31;
};
System.out.println("Days: " + days);
}
}Использование результата на месте
Значение выражения switch можно использовать сразу, например внутри вызова println.
public class Main {
public static void main(String[] args) {
int code = 1;
System.out.println("Status: " + switch (code) {
case 0 -> "OK";
case 1 -> "Warning";
default -> "Error";
});
}
}Согласованность типов
Все ветки должны использовать один тип результата. Если одна ветка возвращает int, а другая — String, код не скомпилируется. Следите, чтобы типы в ветках совпадали.
public class Main {
public static void main(String[] args) {
int n = 3;
double factor = switch (n) {
case 1 -> 0.5;
case 2 -> 1.0;
default -> 1.5;
};
System.out.println(factor);
}
}Замена цепочек тернарных операторов
Выражение switch часто читается понятнее вложенных тернарных операторов, когда одно значение преобразуется во множество результатов.
public class Main {
public static void main(String[] args) {
int rating = 4;
String stars = switch (rating) {
case 1 -> "*";
case 2 -> "**";
case 3 -> "***";
case 4 -> "****";
default -> "*****";
};
System.out.println(stars);
}
}Сочетание с переменными
Результат выражения switch можно использовать в дальнейших вычислениях, как и любое другое значение.
public class Main {
public static void main(String[] args) {
int tier = 2;
int discount = switch (tier) {
case 1 -> 5;
case 2 -> 10;
default -> 0;
};
int price = 100 - discount;
System.out.println("Price: " + price);
}
}Проверка знаний
Почему выражение switch обычно должно включать ветку default?
Итоги
Вы научились использовать switch как выражение:
- Оно выдаёт значение, которое можно присвоить или вернуть
- Завершайте присваивание точкой с запятой
- Оно должно охватывать все варианты (обычно требуется
default) - Для перечислений, охватывающих все константы,
defaultне нужен - Все ветки должны иметь один и тот же тип результата
Часто задаваемые вопросы
Урок «switch как выражение» бесплатный?
Да — полный текст урока «switch как выражение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «switch как выражение»?
Возвращайте значения из switch Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «switch как выражение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Стиль switch со стрелкой
- switch как выражение
- Ключевое слово yield
- Варианты с несколькими метками