Vai al contenuto
Leo

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:

Leo
scrivi(numero_in_lettere(123))
scrivi(euro_in_lettere(12.50))
scrivi(plurale("casa", femminile = vero))
scrivi(con_articolo("zaino"))
scrivi(sillabe("programmare", separatore = "-"))
Risultato
centoventitré
dodici euro e cinquanta centesimi
case
lo zaino
pro-gram-ma-re

con_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:

Leo
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}"
Risultato
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:

Leo
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"]}"
Risultato
Media: 24.6
Mediana: 25
Deviazione: 4.27
Minimo 18, massimo 30

riepilogo_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.

Leo
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)
Risultato
 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:

Leo
variabile dati = {"nome": "Ada", "voti": [30, 28]}
scrivi(a_json(dati, 2))
Risultato
{
  "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>:

Leo
scrivi(trova_tutti("3 gatti e 12 pesci", "<cifre>"))
scrivi(corrisponde("mario@esempio.it", "<email>"))
Leo
["3", "12"]
vero

trova_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.

Leo
variabile a = crea_punto(0, 0)
variabile b = crea_punto(3, 4)
scrivi "Distanza: {distanza_punti(a, b)}"
scrivi(somma_punti(a, b))
Risultato
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.

Leo
scrivi(impronta("password"))
variabile f = misura_forza_password("password")
scrivi "Livello: {f["livello"]}, punteggio {f["punteggio"]}"
Risultato
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
Livello: pessima, punteggio 0

impronta 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:

Leo
variabile estratti = scegli_a_caso(1..90, quanti = 6)
scrivi "Estratti {lunghezza(estratti)} numeri tra 1 e 90"
Risultato
Estratti 6 numeri tra 1 e 90

scegli_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

  1. Chiedi all'utente un importo e stampalo in lettere con euro_in_lettere, poi anche la sua impronta SHA-256 con impronta.
  2. Costruisci una tabella con i tuoi film preferiti (titolo, anno, voto), filtra quelli con voto alto e ordinali per anno.
  3. Scrivi un «estrattore del lotto» che pesca sei numeri con scegli_a_caso e 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.