Курс Raku / Розширені / Порядок виконання / given та when

Зіставлення діапазонів, типів та умов

Блок when не лише порівнює на рівність. Він виконує розумне зіставлення між топіком і значенням, яке ви йому дали, тож зіставлятися можна з діапазонами, типами й умовами, а не тільки з окремими значеннями.

Діапазони

Діапазон збігається, коли топік потрапляє всередину нього. Це робить 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


💪 Або перейдіть одразу до вправ цього розділу.