Оператор yield
Оператор yield используется внутри блока switch,
когда этот блок применяется как выражение, то есть его результат
присваивается переменной или возвращается из метода. В отличие от
стрелочной формы case -> значение, оператор yield
позволяет вернуть значение из многострочного блока кода. После
yield указывается выражение, значение которого становится
результатом всего switch. Оператор yield завершает
выполнение текущей ветки, поэтому код после него в этой ветке
не выполняется.
Синтаксис
switch (value)
{
case label:
// some code
yield expression;
default:
// some code
yield expression;
}
Пример
Давайте с помощью switch и yield определим,
является ли число чётным. Обратите внимание, что результат
switch присваивается переменной:
public class Main
{
public static void main(String[] args)
{
int num = 4;
String res = switch (num % 2)
{
case 0:
yield "even";
default:
yield "odd";
};
System.out.println(res);
}
}
Результат выполнения кода:
"even"
Пример
Оператор yield удобен, когда в ветке case нужно
выполнить несколько действий перед возвратом значения. Давайте
вернём описание длины строки:
public class Main
{
public static void main(String[] args)
{
String str = "abcde";
String res = switch (str.length())
{
case 5:
String msg = "length is five";
yield msg;
default:
yield "other length";
};
System.out.println(res);
}
}
Результат выполнения кода:
"length is five"
Пример
Давайте используем yield вместе с новым синтаксисом
case без двоеточия, что делает код более компактным:
public class Main
{
public static void main(String[] args)
{
int day = 3;
String res = switch (day)
{
case 1, 2, 3, 4, 5:
yield "weekday";
case 6, 7:
yield "weekend";
default:
yield "unknown";
};
System.out.println(res);
}
}
Результат выполнения кода:
"weekday"