Ключевое слово yield
Получайте значения из блоков switch
«Ключевое слово yield» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Когда одной строки недостаточно
Стрелочная ветка, например case 1 -> 42;, напрямую возвращает значение. Но что делать, если перед выдачей значения ветке требуется выполнить несколько инструкций? Здесь используется yield.
Ключевое слово yield
Внутри блочной ветки ключевое слово yield задаёт значение, которое выдаёт выражение switch. Представляйте его как return, но предназначенный для ветки switch.
public class Main {
public static void main(String[] args) {
int n = 3;
int result = switch (n) {
case 3 -> {
int squared = n * n;
yield squared;
}
default -> 0;
};
System.out.println(result);
}
}yield внутри блока
Перед вызовом yield в блоке можно выполнить любую логику. Последним действием блока должна быть выдача значения с помощью yield.
public class Main {
public static void main(String[] args) {
int amount = 250;
String label = switch (amount / 100) {
case 0 -> "small";
default -> {
System.out.println("Computing label...");
yield "large";
}
};
System.out.println(label);
}
}Сочетание стрелочных и блочных веток
Одно выражение switch может сочетать простые стрелочные ветки и блочные ветки, использующие yield. Для каждого варианта выбирайте подходящую форму.
public class Main {
public static void main(String[] args) {
int code = 2;
String msg = switch (code) {
case 1 -> "One";
case 2 -> {
String s = "T" + "wo";
yield s;
}
default -> "Other";
};
System.out.println(msg);
}
}Вычисление перед выдачей значения
Блочные ветки идеально подходят, когда значение нужно вычислить. Здесь перед выдачей результата мы складываем цифры.
public class Main {
public static void main(String[] args) {
int category = 1;
int value = switch (category) {
case 1 -> {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
yield sum;
}
default -> 0;
};
System.out.println(value);
}
}Выдача значения и возврат
yield завершает только ветку switch и возвращает значение. return завершил бы работу всего метода. В блоке выражения switch используйте yield.
public class Main {
static int classify(int n) {
int rank = switch (n) {
case 0 -> 0;
default -> {
yield (n > 0) ? 1 : -1;
}
};
return rank;
}
public static void main(String[] args) {
System.out.println(classify(-7));
}
}Выдача значения в старом синтаксисе с двоеточиями
Оператор switch со старым синтаксисом с двоеточиями также может быть выражением, если использовать yield вместо break. Каждый раздел с меткой выдаёт своё значение.
public class Main {
public static void main(String[] args) {
int day = 2;
String name = switch (day) {
case 1: yield "Mon";
case 2: yield "Tue";
default: yield "Other";
};
System.out.println(name);
}
}Условная выдача значения
Блочная ветка может содержать логику if и выдавать разные значения в зависимости от пути выполнения. Каждый путь должен выдавать значение.
public class Main {
public static void main(String[] args) {
int temp = 30;
String advice = switch (temp / 10) {
case 3 -> {
if (temp > 35) {
yield "Very hot";
}
yield "Warm";
}
default -> "Mild";
};
System.out.println(advice);
}
}Выдача объектов
yield работает с любым типом, в том числе с объектами. Здесь ветка создаёт результат StringBuilder и выдаёт его как String.
public class Main {
public static void main(String[] args) {
int count = 3;
String stars = switch (count) {
case 0 -> "";
default -> {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
sb.append("*");
}
yield sb.toString();
}
};
System.out.println(stars);
}
}Совет по читаемости
Предпочитайте простые стрелочные ветки, если достаточно одного значения. Используйте блок и yield только тогда, когда ветке действительно нужны дополнительные инструкции. Так switch остаётся аккуратным.
public class Main {
public static void main(String[] args) {
int level = 2;
int xp = switch (level) {
case 1 -> 100;
case 2 -> {
int base = 100;
yield base * 2;
}
default -> 0;
};
System.out.println(xp);
}
}Полный пример
Соберём всё вместе: сопоставитель статусов в стиле HTTP, использующий и стрелочные, и блочные ветки.
public class Main {
public static void main(String[] args) {
int status = 404;
String message = switch (status / 100) {
case 2 -> "Success";
case 4 -> {
String base = "Client error ";
yield base + status;
}
case 5 -> "Server error";
default -> "Unknown";
};
System.out.println(message);
}
}Проверка знаний
Какое ключевое слово задаёт результирующее значение внутри ветки выражения switch с несколькими инструкциями?
Итоги
Вы изучили ключевое слово yield:
yieldвыдаёт значение из блочной ветки- Оно похоже на
return, но действует только внутри веткиswitch - Стрелочные и блочные ветки можно свободно сочетать
- Каждый путь выполнения в блоке должен использовать
yield - Используйте блоки только тогда, когда нужны дополнительные инструкции
Часто задаваемые вопросы
Урок «Ключевое слово yield» бесплатный?
Да — полный текст урока «Ключевое слово yield» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Ключевое слово yield»?
Получайте значения из блоков switch Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ключевое слово yield»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Стиль switch со стрелкой
- switch как выражение
- Ключевое слово yield
- Варианты с несколькими метками