Курс по 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 е истински клон „нищо от горното”. Кой
вариант се чете по-добре е въпрос на вкус: поставете проверката първа,
когато невалидният случай е изключение, или я направете резервен
вариант, когато валидните етапи са ясно изброени.