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

Коментари

  1. Това решение смесва два вида when. Първият е условие, $_ < 0 (където $_ е темата, зададена от given), което отсява невалидните възрасти; останалите са диапазони, които групират валидните възрасти в етапи.

  2. Редът има значение. Проверката за отрицателна възраст е на първо място, за да се изпълни преди каквато и да е проверка за диапазон. Стойността 30 попада в 20..64, така че програмата отпечатва adult.

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

Навигация в курса

Етап от живота по възраст   |   Четно, нечетно или нула