Курс по 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 →
💪 Или преминете направо към упражненията в този
раздел.