Курс по 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


💪 Или преминете направо към упражненията в този раздел.