Raku-Kurs / Reguläre Ausdrücke und Grammatiken / Grammatiken / Aktionsklassen / Exercises / Machen Sie ein Datum lesbar
Lösung: Machen Sie ein Datum lesbar
Hier ist eine mögliche Lösung der Aufgabe.
Code
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;🦋 Du findest den Quellcode in der Datei humanise-a-date.raku.
Ausgabe
5 July 2026Kommentare
Anders als bei einer schlichten Rechenaktion machen die Tokenmethoden Werte verschiedener Art:
yearunddaymachen ganze Zahlen,monthaber eine Zeichenkette, indem es seinen Zahlenwert als Index in eine Liste von Monatsnamen verwendet.$/ - 1macht aus dem zweistelligen Treffer eine Zahl (07→7) und verschiebt auf einen ab null gezählten Index,month07macht alsoJuly.Die Methode
TOPsieht sich den blanken Text nie wieder an. Sie liest nur die drei Werte, die die Untermethoden bereits gemacht haben —$<day>.made,$<month>.made,$<year>.made—, und setzt sie in die endgültige Zeichenkette ein.5ausdayzurückzulesen lässt nebenbei auch die führende Null wegfallen.Das ist die alltägliche Aufgabe einer Aktionsklasse: strukturierte Eingabe einmal zerlegen und dann jede Methode ihr eigenes Stück in das verwandeln lassen, was der Rest des Programms braucht.
Kursnavigation
← Machen Sie ein Datum lesbar | Funktionale, nebenläufige, reaktive und Web-Programmierung →