Страж when
Страж when используется в конструкции switch вместе с шаблонами (patterns) для добавления дополнительного условия. Он позволяет выполнить ветку кода только в том случае, если значение совпало с шаблоном и при этом указанное после when логическое выражение вернуло true. Если условие ложно, Dart переходит к следующей ветке. Страж when не является самостоятельным оператором, а только дополняет шаблон в case.
Синтаксис
switch (value)
{
case pattern when condition:
// code
case pattern when condition:
// code
default:
// code
}
Пример
Давайте проверим число: если оно больше нуля и меньше десяти, выведем сообщение. В противном случае выведем другое сообщение:
void main()
{
int num = 5;
switch (num)
{
case > 0 when num < 10:
print('number is between 0 and 10');
default:
print('number is out of range');
}
}
Результат выполнения кода:
"number is between 0 and 10"
Пример
Давайте используем страж when вместе с шаблоном списка. Проверим, что список содержит ровно три элемента и первый элемент больше нуля:
void main()
{
var list = [1, 2, 3];
switch (list)
{
case [var a, var b, var c] when a > 0:
print('first element is positive');
default:
print('condition is not met');
}
}
Результат выполнения кода:
"first element is positive"
Пример
Давайте проверим строку: если она начинается с 'a' и её длина больше трёх, выведем одно сообщение, иначе - другое:
void main()
{
String str = 'abcde';
switch (str)
{
case var s when s.startsWith('a') && s.length > 3:
print('string matches');
default:
print('string does not match');
}
}
Результат выполнения кода:
"string matches"