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

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

Жизненный этап по возрасту   |   Чётное, нечётное или ноль