Курс Raku / Регулярні вирази та граматики / Граматики / Класи дій / Вправи / Зробіть дату зрозумілою людині
Розв’язання: Зробіть дату зрозумілою людині
Ось одне з можливих розв’язань задачі.
Код
grammar Date {
token TOP { <year> '-' <month> '-' <day> }
token year { \d ** 4 }
token month { \d ** 2 }
token day { \d ** 2 }
}
class Humanise {
method year($/) { make $/.Int }
method month($/) { make <January February March April May June
July August September October November December>[$/ - 1] }
method day($/) { make $/.Int }
method TOP($/) { make "{$<day>.made} {$<month>.made} {$<year>.made}" }
}
say Date.parse('2026-07-05', actions => Humanise.new).made;🦋 Знайдіть програму у файлі humanise-a-date.raku.
Вивід
5 July 2026Коментарі
На відміну від простої арифметичної дії, методи токенів створюють значення різних видів:
yearтаdayстворюють цілі числа, аmonthстворює рядок, використовуючи своє числове значення як індекс у списку назв місяців.$/ - 1перетворює двоцифровий збіг на число (07→7) і зсуває його до індексу від нуля, тож місяць07створюєJuly.Метод
TOPжодного разу не переглядає сирий текст. Він лише читає три значення, які вже створили підметоди, —$<day>.made,$<month>.made,$<year>.made— і вставляє їх у підсумковий рядок. Читання5назад ізdayзаразом задарма прибирає ведучий нуль.Це щоденна робота класу дій: один раз розібрати структурований вхідний текст, а далі дати кожному методу перетворити свій шматок на те, що потрібно решті програми.
Навігація курсом
← Зробіть дату зрозумілою людині | Функційне, конкурентне, реактивне та веб-програмування →