Курс языка программирования 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


💪 Или перейдите сразу к упражнениям этого раздела.