Ciao, e benvenuto nell'ottava puntata della quarantaseiesima stagione. Finora abbiamo trattato i tipi come etichette: questa cosa è un numero, quella una parola. Ma c'è una profondità sorprendente in TypeScript, che pochi si aspettano: il suo sistema di tipi è molto più di un insieme di etichette. È un piccolo linguaggio di programmazione a sé, che gira dentro il correttore e calcola tipi a partire da altri tipi. Oggi scopriamo un linguaggio dentro il linguaggio: i tipi che calcolano.
Partiamo dalla forma più utile e comune, perché la usi già. Comincio da qualcosa che incontri di sicuro: il contenitore che va bene per qualunque contenuto. Una lista, una scatola, un risultato. Non vuoi scrivere una versione separata per la lista di numeri, una per la lista di parole, una per la lista di utenti: vuoi una sola forma, generica, che si adatta a qualunque cosa ci metti dentro, e che però tiene comunque traccia di cosa contiene. È un tipo con uno spazio vuoto da riempire, una forma riutilizzabile. Metti dentro numeri, e diventa una lista di numeri, che ricorda di esserlo. Questa è la faccia quotidiana dei tipi che si adattano.
Voglio portarti più in profondità, perché qui diventa affascinante. Ma si va molto più a fondo di così. Puoi scrivere tipi che prendono altri tipi e ne calcolano di nuovi. Dammi il tipo di un utente, e io calcolo il tipo di un utente con tutti i campi facoltativi. Dalla forma di questi dati, ricavo la forma del modulo per modificarli. Il sistema di tipi può ramificarsi, trasformare, costruire. Non descrive soltanto: computa. Al punto che c'è chi, per gioco e per sfida, ha realizzato interi giochi e rompicapi funzionanti scritti puramente nei tipi, perché quel sistema è abbastanza potente da calcolare quasi qualunque cosa. Un intero programma, che gira dentro il controllore, senza produrre nulla che venga eseguito.
Voglio dirti perché questo conti davvero, perché non è solo un trucco. A cosa serve, nella pratica? Serve alle librerie per offrirti tipi precisi e che si adattano, così che l'aiuto del tuo editor, quello di cui parlammo, resti esatto anche per codice molto flessibile. È la magia profonda dietro il perché le migliori librerie di TypeScript sembrano indovinare cosa intendevi: dietro le quinte, i tipi calcolano la forma giusta per la tua situazione specifica. Ti danno suggerimenti su misura, come se conoscessero il tuo caso, perché in un certo senso lo calcolano sul momento, adattandosi a ciò che hai scritto.
Voglio darti il rovescio, con onestà, perché prepara la prossima puntata. Ma questa potenza è a doppio taglio, e devo dirtelo. Il codice a livello di tipi può diventare complesso e illeggibile come qualunque altro programma. Diventa una tana del coniglio dove sviluppatori bravissimi costruiscono torri di tipi calcolati che nessun altro riesce più a leggere. La potenza invita all'eccesso: appena scopri di poter calcolare i tipi, la tentazione è calcolarne di sempre più ingegnosi, finché la cura diventa più oscura della malattia. Un tipo così astuto che nessun collega lo capisce non è un trionfo: è un problema nuovo, travestito da bravura.
Voglio darti l'immagine che rende chiara questa idea, perché è spiazzante. Pensavi di aver comprato una macchinetta per fare etichette, di quelle che ci scrivi sopra un nome e la attacchi. E scopri che dentro c'è un piccolo laboratorio, capace di costruire etichette a partire da altre etichette, di calcolarle, di assemblarle. Una potenza stupefacente. E anche un posto dove puoi perderti per giorni, a fabbricare un'etichetta così ingegnosa che nessun collega, poi, riesce a capire. Lo strumento che credevi banale nasconde un'officina; e nelle officine, a volte, ci si perde.
Voglio trarre la lezione generale, perché torna un tema caro a questo podcast. Da' alle persone un sistema abbastanza potente da calcolare, e loro calcoleranno. La potenza è un dono che arriva sempre con la tentazione di abusarne. La stessa espressività che permette a uno strumento di servire bisogni sottili e raffinati, gli permette anche di crescere barocco, contorto, illeggibile. E allora la moderazione diventa una virtù proprio perché la potenza c'è: dove non puoi fare troppo, non serve trattenersi; dove puoi fare tutto, trattenersi è tutto. Meno, ancora una volta, è spesso meglio.
Per oggi ci fermiamo qui. Abbiamo scoperto che il sistema di tipi di TypeScript è un piccolo linguaggio a sé, che calcola tipi da altri tipi. La faccia quotidiana è il contenitore generico, una forma sola che si adatta a qualunque contenuto tenendo traccia di cosa contiene. Ma si va a fondo: tipi che prendono altri tipi e ne computano di nuovi, tanto potenti da poterci scrivere interi giochi. Serve alle librerie per darti tipi precisi e adattivi, e all'editor per restare esatto anche sul codice flessibile. Il rovescio: quella potenza diventa una tana del coniglio di tipi illeggibili. Come una macchinetta per etichette che nasconde un'officina in cui perdersi. La lezione: dai potere e ne abuseranno, e la moderazione è una virtù proprio perché la potenza c'è. Nella prossima e penultima puntata, il prezzo e i limiti: la rete che non è una garanzia. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.