Ciao, e benvenuto nella quinta puntata della quarantacinquesima stagione. Nelle scorse puntate abbiamo montato i pezzi: il ciclo degli eventi, e le funzioni che si tengono in mano. Oggi li mettiamo insieme per capire la cosa che senti davvero sotto le dita, scrivendo JavaScript: come si gestisce il tempo. Come si dice fai questo, ma dopo, quando la cosa lenta sarà pronta. E la storia di come JavaScript ha imparato a dirlo bene è la storia di un mestiere che matura, in tre atti. Oggi vediamo il tempo in JavaScript, dal richiamo alla promessa.
Partiamo dal problema, perché nasce da tutto ciò che abbiamo detto. Siccome il lavoratore non aspetta mai fermo, non puoi scrivere prendi i dati, poi usali, come due righe semplici una sotto l'altra. Perché i dati non arrivano subito: arrivano più tardi. E allora, invece di prendere e usare, devi dire cosa fare quando arriveranno. Il tempo si insinua in mezzo: c'è un dopo, e tu devi preparare istruzioni per quel momento che ancora non è venuto. Tutta la bellezza sta nel dire bene questo dopo.
Voglio darti il primo atto, il richiamo, perché è il punto di partenza. Il primo modo, il più antico, è il richiamo. Consegni alla cosa lenta una funzione, quella che si tiene in mano, e le dici: ecco cosa fare quando avrai finito. È semplice, ed elegante nella sua idea. Ma ha un difetto che emerge appena le cose si complicano: se devi fare più cose lente in fila, una dopo l'altra, finisci per annidare un richiamo dentro l'altro, dentro l'altro ancora. Fai questo, e quando hai finito fai quest'altro, e quando hai finito fai quell'altro: il codice scivola sempre più a destra, si incastra, diventa una piramide aggrovigliata che è stata soprannominata, con affetto e disperazione, l'inferno dei richiami.
Voglio darti il secondo atto, la promessa, perché è il primo grande sollievo. Il secondo modo è più bello: la promessa. Invece di consegnare tu una funzione, è la cosa lenta a consegnarti qualcosa: un gettone, una promessa di un valore futuro. È come se ti dicesse: non ho ancora il dato, ma ti prometto che ti farò sapere, o con il risultato, o con un errore se qualcosa va storto. E con questa promessa in mano puoi incatenare i passi in modo piatto e leggibile: fai questo, poi quello, poi quell'altro, e in fondo raccogli eventuali errori in un posto solo. Niente più piramide che scivola a destra: una sequenza ordinata, che si legge dall'alto in basso. Un enorme passo avanti in chiarezza.
Voglio darti il terzo atto, il più elegante, perché è il traguardo. Il terzo modo è il più raffinato di tutti. È una scrittura che ti permette di esprimere il codice che aspetta come se fosse codice normale, riga dopo riga, dall'alto in basso: aspetta il dato, e poi usalo. Sembra semplice e sequenziale, come le due righe che all'inizio non potevamo scrivere. Eppure, sotto sotto, il lavoratore continua a non bloccarsi mai, esattamente come prima. È il meglio dei due mondi: si legge come una sequenza tranquilla, ma gira senza mai fermare nessuno. La complessità del non aspettare c'è ancora, ma è nascosta sotto una scrittura limpida. Sembri scrivere aspetto, ma nessuno resta davvero fermo.
Voglio farti apprezzare cosa racconta questa evoluzione, perché è la parte più bella. Guarda cos'è successo in questi tre atti. L'idea di fondo non è mai cambiata: fai qualcosa quando la cosa lenta finisce. Sempre quella. Ciò che è cambiato è il modo di dirla, che è diventato via via più umano, più gentile con chi legge e scrive. È un esempio splendido di una comunità che lavora non su una nuova idea, ma su un modo migliore di esprimere la stessa idea. E, tra l'altro, è esattamente così che parli con le interfacce dei servizi di cui abbiamo parlato tanto: ogni volta che il tuo codice va a prendere dei dati da un server, sta ballando proprio questa danza del dopo.
Voglio darti l'immagine che rende chiara questa idea, e la lezione. Pensa a ordinare qualcosa che non è ancora pronto. Il richiamo è lasciare il tuo numero di telefono: chiamami quando arriva. La promessa è ricevere uno scontrino di ritiro che tieni in mano, con cui puoi organizzarti nell'attesa. E l'ultimo modo è avere un assistente personale a cui dici, in una frase sola e liscia, vai a ritirarlo, e poi incartalo, mentre lui si occupa di tutta l'attesa per te. La lezione è dolce: la stessa idea si può esprimere in modi che vanno dal funzionante al grazioso, e gran parte del progresso, nel programmare, non è inventare idee nuove, ma trovare modi più gentili di dire quelle vecchie.
Per oggi ci fermiamo qui. Abbiamo messo insieme il ciclo degli eventi e le funzioni per capire come JavaScript gestisce il tempo, il dopo. Siccome il lavoratore non aspetta, devi dire cosa fare quando la cosa lenta sarà pronta, e il modo di dirlo è maturato in tre atti. Il richiamo: consegni una funzione, ma annidandone tante nasce l'inferno dei richiami. La promessa: ricevi un gettone del futuro, e incateni i passi in modo piatto e leggibile. E l'ultimo modo: scrivi come se fosse sequenziale, mentre sotto nessuno si blocca. L'idea non cambia mai, cambia solo il modo di dirla, sempre più umano. La lezione: gran parte del progresso è trovare modi più gentili di dire idee vecchie. Nella prossima puntata cambiamo argomento: oggetti fatti di oggetti. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.