Курс языка программирования Raku / Продвинутый уровень / Порядок выполнения / given и
when
Сопоставление диапазонов, типов и условий
Блок when не только сравнивает на равенство. Он
выполняет умное сопоставление (smart match) между топиком и
заданным значением, поэтому можно сопоставлять с диапазонами, типами и
условиями, а не только с отдельными значениями.
Диапазоны
Диапазон совпадает, когда топик попадает в него. Это делает
given/when естественным инструментом для
группировки чисел по интервалам:
my $score = 75;
given $score {
when 90..100 { say 'A' }
when 80..89 { say 'B' }
when 70..79 { say 'C' }
default { say 'F' }
}Значение 75 попадает в диапазон 70..79,
поэтому программа печатает:
CТипы
Тип совпадает, когда топик принадлежит этому типу. Это позволяет ветвиться в зависимости от того, какой вид значения у вас есть:
my $value = 'Raku';
given $value {
when Int { say 'an integer' }
when Str { say 'a string' }
}Поскольку $value содержит строку, программа
печатает:
a stringУсловия
Можно также использовать сравнение напрямую. Внутри when
топик доступен как $_, поэтому условие вроде
$_ < 0 совпадает, когда оно истинно:
my $n = -7;
given $n {
when $_ < 0 { say 'negative' }
when 0 { say 'zero' }
default { say 'positive' }
}Здесь первый when совпадает, и программа печатает:
negativeПрактика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← given и
when | Тест —
when →
💪 Или перейдите сразу к упражнениям этого
раздела.