Parte IV — Potenza
Capitolo 16 — Un tour della libreria
Un linguaggio non è solo la sua grammatica: è anche tutto ciò che porta già in dotazione. Leo include oltre novecento funzioni di libreria, sempre disponibili senza installare nulla. Questo capitolo non le elenca tutte — per quello ci sono le schede LIBRERIA_*.md in docs/ — ma ti accompagna, area per area, a vedere cosa c'è e come si usa, con esempi veri. Pensalo come una passeggiata in una grande bottega: non per comprare tutto, ma per sapere cosa c'è sugli scaffali, così da ricordartene quando ti servirà.
Una sola avvertenza: alcune funzioni (quelle che pescano a caso o misurano il tempo) danno un risultato diverso a ogni esecuzione. Dove capita, lo segnaliamo.
🦁 Curiosità — Batterie incluse
Tra i programmatori si dice che un buon linguaggio arrivi «con le batterie incluse» (batteries included): tante funzioni già pronte all'uso, senza doverle cercare o installare altrove. L'espressione è stata resa celebre dal mondo di Python ed è diventata un complimento ambito. Con le sue oltre novecento funzioni di libreria, Leo prende la cosa molto sul serio.
Testo e lingua italiana
Qui Leo dà il meglio di sé, perché è un linguaggio italiano fin nelle ossa. Sa scrivere i numeri in lettere, fare plurali e articoli, dividere in sillabe:
scrivi(numero_in_lettere(123))
scrivi(euro_in_lettere(12.50))
scrivi(plurale("casa", femminile = vero))
scrivi(con_articolo("zaino"))
scrivi(sillabe("programmare", separatore = "-"))centoventitré
dodici euro e cinquanta centesimi
case
lo zaino
pro-gram-ma-recon_articolo sa che davanti a «zaino» va «lo», non «il»: piccole cose che, in un programma che parla a persone italiane, fanno la differenza tra un robot e un testo scritto bene. Nella stessa area ci sono funzioni per Markdown, XML e YAML, e l'inverso lettere_in_numero.
Date e tempo
Il tipo data conosce il calendario e si stampa all'italiana. Puoi fare aritmetica tra date, sapere che giorno della settimana cade una certa data, contare i giorni che mancano:
variabile natale = data(2026, 12, 25)
variabile oggi_data = data(2026, 10, 5)
scrivi(natale)
scrivi "Giorni al Natale: {giorni_tra(oggi_data, natale)}"
scrivi(nome_giorno(5))
scrivi "Natale cade di {natale.nome_giorno}"25/12/2026
Giorni al Natale: 81
venerdì
Natale cade di venerdìUna data ha proprietà come giorno, mese, anno, nome_giorno, fine_settimana, e metodi come aggiungi_giorni. Come i testi, le date non si modificano: aggiungere giorni restituisce una data nuova. Per il tempo che scorre ci sono oggi(), ora(), adesso() e attendi(secondi).
Calcolo e statistica
Oltre alle funzioni matematiche di base, Leo porta la statistica pronta all'uso. Niente librerie da installare: media, mediana, deviazione e un riepilogo completo sono a portata di mano:
variabile voti = [18, 25, 30, 28, 22]
scrivi "Media: {media(voti)}"
scrivi "Mediana: {mediana(voti)}"
scrivi "Deviazione: {arrotonda(deviazione(voti), 2)}"
variabile r = riepilogo_numeri(voti)
scrivi "Minimo {r["minimo"]}, massimo {r["massimo"]}"Media: 24.6
Mediana: 25
Deviazione: 4.27
Minimo 18, massimo 30riepilogo_numeri dà in un colpo solo conteggio, media, mediana, quartili, minimo, massimo e deviazione: perfetto per farsi un'idea veloce di un insieme di dati. Nella scheda scientifica trovi anche unità di misura, calcoli finanziari e qualche strumento di intelligenza artificiale elementare.
Tabelle di dati
Quando i dati sono tanti e strutturati, il tipo tabella è una piccola meraviglia: filtra, ordina, raggruppa, come un foglio di calcolo ma scritto in italiano.
variabile t = tabella([
{"nome": "Ada", "voto": 30},
{"nome": "Marco", "voto": 24},
{"nome": "Lia", "voto": 28}
])
variabile bravi = t.filtra("voto", ">", 27).ordina("voto", decrescente = vero)
scrivi(bravi) nome | voto
------+------
Ada | 30
Lia | 28
(2 righe, 2 colonne)Una tabella si stampa già allineata e leggibile; si legge da un CSV con tabella_da_file, si salva, si disegna in un grafico. Per chi lavora con i dati, è lo strumento che evita mille cicli scritti a mano.
Formati: JSON, CSV e dintorni
Abbiamo già usato JSON e CSV nel Capitolo 13. La libreria sa anche produrre JSON ben formattato per l'occhio umano, con il rientro:
variabile dati = {"nome": "Ada", "voti": [30, 28]}
scrivi(a_json(dati, 2)){
"nome": "Ada",
"voti": [
30,
28
]
}Nella stessa famiglia ci sono il lavoro sui dati binari, la compressione, e la lettura del «tipo vero» di un file (capire se un file è davvero un'immagine, indipendentemente dall'estensione).
Modelli di testo
Per cercare e validare schemi dentro un testo — numeri, email, date — Leo offre i modelli, un'alternativa leggibile alle espressioni regolari, con scorciatoie come <cifre>, <email>, <data>:
scrivi(trova_tutti("3 gatti e 12 pesci", "<cifre>"))
scrivi(corrisponde("mario@esempio.it", "<email>"))["3", "12"]
verotrova_tutti estrae tutti i pezzi che seguono il modello; corrisponde dice se tutto il testo lo rispetta — perfetto per validare un campo inserito da un utente.
Geometria e giochi
C'è un'intera area dedicata alla geometria vettoriale, utile per i giochi, le animazioni e i disegni: punti, vettori, distanze, angoli.
variabile a = crea_punto(0, 0)
variabile b = crea_punto(3, 4)
scrivi "Distanza: {distanza_punti(a, b)}"
scrivi(somma_punti(a, b))Distanza: 5.0
[3, 4](Sì, è il triangolo 3-4-5 della scuola.) Su queste fondamenta, Leo Studio costruisce una ricca scheda «Giochi» con sprite, fisica, collisioni e scene, che incontreremo nella Parte V.
Sicurezza
Leo prende sul serio la sicurezza, con un'area pensata per la difesa (ne faremo un capitolo intero nella Parte V). Qui un assaggio: l'impronta crittografica di un dato, la valutazione della robustezza di una password, la generazione di password memorizzabili.
scrivi(impronta("password"))
variabile f = misura_forza_password("password")
scrivi "Livello: {f["livello"]}, punteggio {f["punteggio"]}"5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
Livello: pessima, punteggio 0impronta calcola l'impronta SHA-256 (la stessa password dà sempre la stessa impronta, ma dall'impronta non si risale alla password). misura_forza_password giudica una password senza pietà: "password" è, giustamente, «pessima». E genera_frase_password(4) crea una frase-password robusta e facile da ricordare — mettendo in fila parole a caso, quindi il risultato cambia a ogni esecuzione (qualcosa come zucca-latte-tetto-gradino-27).
Caso e cronometro
Per i giochi, le simulazioni e le misure ci sono le funzioni del caso e del tempo:
variabile estratti = scegli_a_caso(1..90, quanti = 6)
scrivi "Estratti {lunghezza(estratti)} numeri tra 1 e 90"Estratti 6 numeri tra 1 e 90scegli_a_caso pesca elementi a caso (qui sei numeri diversi del lotto); mescola rimescola una lista; casuale(da, a) dà un intero a caso. E cronometro() misura quanto impiega un pezzo di programma, utile per capire dove conviene ottimizzare.
💡 L'idea — La cassetta degli attrezzi
La libreria è una cassetta degli attrezzi ben fornita: invece di forgiarti il martello ogni volta che ti serve, apri il cassetto giusto e prendi lo strumento già pronto. Il mestiere non sta nel rifare gli attrezzi, ma nel sapere quale c'è e quando usarlo. Ecco perché conviene farsi un giro tra gli scaffali prima di mettersi a scrivere tutto da capo.
E molto altro
Abbiamo toccato le aree più comuni, ma la bottega è grande. Ci sono funzioni per le immagini (apri una foto, applica filtri, crea collage e GIF), per il web (scarica pagine, leggi feed, parla con API; le funzioni offline come html_in_testo e proteggi_html lavorano su HTML che hai già), per la rete e il sistema su ogni piattaforma, per l'ufficio (Excel, Word, PDF, stampa unione), per i database senza SQL, per i media (suoni, voce). Quando ti troverai davanti un problema, è probabile che un pezzo della soluzione sia già sullo scaffale: la prima mossa, prima di scrivere codice, è dare un'occhiata alle schede LIBRERIA_*.md.
Prova tu
- Chiedi all'utente un importo e stampalo in lettere con
euro_in_lettere, poi anche la sua impronta SHA-256 conimpronta. - Costruisci una
tabellacon i tuoi film preferiti (titolo, anno, voto), filtra quelli con voto alto e ordinali per anno. - Scrivi un «estrattore del lotto» che pesca sei numeri con
scegli_a_casoe li stampa ordinati. Eseguilo due volte e osserva che cambiano.
Finisce qui la Parte IV. Hai visto come far lavorare Leo in parallelo, come ragionare su sequenze infinite e quanto ti regala già la libreria. Nella Parte V usciamo dal terminale: finestre, telefono, sicurezza e distribuzione.