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

Коментарі

  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 є справжньою гілкою «жодне з переліченого». Який варіант читається краще — справа смаку: ставте перевірку першою, коли недійсний випадок є винятком, або зробіть її запасним варіантом, коли всі дійсні етапи чітко перелічено.

Навігація курсом

Етап життя за віком   |   Парне, непарне чи нуль