Corso di Raku / Espressioni regolari e grammatiche / Grammatiche / Classi di azione / Exercises / Rendete leggibile una data
Soluzione: Rendete leggibile una data
Ecco una possibile soluzione del compito.
Codice
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;🦋 Trova il programma nel file humanise-a-date.raku.
Output
5 July 2026Commenti
A differenza di una semplice azione aritmetica, i metodi dei token producono valori di generi diversi:
yearedayproducono interi, mamonthproduce una stringa usando il proprio valore numerico come indice in un elenco di nomi di mesi.$/ - 1converte in numero la corrispondenza di due cifre (07→7) e passa a un indice che parte da zero, quindi ilmonth07produceJuly.Il metodo
TOPnon riesamina mai il testo grezzo. Legge soltanto i tre valori che i sottometodi hanno già prodotto —$<day>.made,$<month>.made,$<year>.made— e li interpola nella stringa finale. Rileggere5dadayfa cadere gratis anche lo zero iniziale.È questo il lavoro quotidiano di una classe di azioni: analizzare una volta l’input strutturato, poi lasciare che ogni metodo trasformi il proprio pezzo in ciò che serve al resto del programma.
Navigazione del corso
← Rendete leggibile una data | Programmazione funzionale, concorrente, reattiva e web →