Курс Raku / Розширені /
Порядок виконання / given та
when / Вправи / Етап життя за
віком
Розв’язання: Етап життя за віком
Ось один із можливих варіантів розв’язання задачі.
Код
my $age = 30;
given $age {
when $_ < 0 { say 'invalid' }
when 0..12 { say 'child' }
when 13..19 { say 'teenager' }
when 20..64 { say 'adult' }
default { say 'senior' }
}🦋 Вихідний код можна знайти у файлі grade-the-score.raku.
Вивід
adultКоментарі
Це розв’язання поєднує два різновиди
when. Перший — це умова,$_ < 0(де$_є топіком, встановленимgiven), яка відсіює недійсний вік; решта — діапазони, що групують дійсний вік за етапами.Порядок має значення. Перевірка на від’ємний вік іде першою, тож вона виконується до того, як буде випробувано будь-який діапазон. Значення
30потрапляє в20..64, тож програма виводитьadult.Блок
defaultохоплює будь-який вік від 65 і вище, який не захоплено жодним із перелічених діапазонів.
Можна перевернути це й дозволити default ловити
натомість недійсний ввід. Перелічіть кожен розпізнаваний етап —
включно з senior як умовою $_ >= 65 — і
вважайте все, що лишилося (як-от від’ємний вік), недійсним:
given $age {
when 0..12 { say 'child' }
when 13..19 { say 'teenager' }
when 20..64 { say 'adult' }
when $_ >= 65 { say 'senior' }
default { say 'invalid' }
}Тут default є справжньою гілкою «жодне з переліченого».
Який варіант читається краще — справа смаку: ставте перевірку першою,
коли недійсний випадок є винятком, або зробіть її запасним варіантом,
коли всі дійсні етапи чітко перелічено.