Курс языка программирования Raku / Продвинутый уровень / Порядок выполнения / given и
when / Exercises / Жизненный этап
по возрасту
Решение: Жизненный этап по возрасту
Вот возможное решение задачи.
Код
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 — настоящая ветка «ничего из
вышеперечисленного». Какой вариант читается лучше — дело вкуса:
поставьте проверку первой, когда недопустимый случай является
исключением, или сделайте её запасным вариантом, когда все допустимые
этапы чётко перечислены.