Ciao, e benvenuto nella terza puntata della quarantacinquesima stagione. Nella scorsa puntata abbiamo visto il ciclo degli eventi: il lavoratore che consegna il lavoro lento e va avanti. Ma consegna cosa, esattamente? Consegna qualcosa da fare quando la cosa sarà pronta. E qui incontriamo uno dei tratti più profondi e definitori di JavaScript, quello che rende possibile tutto il resto: in JavaScript, le funzioni si tengono in mano. Oggi capiamo cosa significa, e perché sia così potente.
Partiamo da come pensiamo di solito a una funzione, perché qui cambia tutto. Di solito incontri una funzione come un blocco di codice con un nome, qualcosa che chiami per farle fare il suo lavoro: calcola questo, stampa quello. La usi, e basta. Ma in JavaScript una funzione è qualcosa di più: è una cosa che puoi tenere in mano. Puoi metterla in una variabile, come faresti con un numero. Puoi passarla a un'altra funzione, come ingrediente. Puoi restituirla come risultato. Puoi conservarla in un elenco. Una funzione, in JavaScript, è un valore a tutti gli effetti, come un numero o una parola, con una differenza: questo valore sa fare qualcosa.
Voglio farti apprezzare perché questo sia potente, perché è il cuore della puntata. Ecco cosa sblocca: la possibilità di passare in giro il comportamento, non solo i dati. Di solito a una funzione dai dei dati: ecco i numeri, sommali. Ma se le funzioni sono valori, puoi dare a una funzione anche un'altra funzione: ecco cosa fare, ecco la ricetta. Puoi dire a qualcosa ecco cosa fare quando hai finito, oppure ecco come confrontare due cose, oppure ecco cosa eseguire per ogni elemento di questa lista. Passi un'istruzione, un pezzo di comportamento, come fosse un ingrediente. E chi lo riceve, lo esegue.
Voglio collegarlo subito al ciclo degli eventi, perché ora si chiude il cerchio. Ti ricordi il lavoratore che consegnava il lavoro lento e diceva chiamami quando è pronto? Bene: quel chiamami quando è pronto è proprio una funzione tenuta in mano e consegnata. Consegni al meccanismo lento una funzione che dice ecco cosa fare quando i dati arrivano, e il meccanismo la terrà da parte, per eseguirla al momento giusto. Senza le funzioni come valori, tutta la danza del ciclo degli eventi non sarebbe possibile. È perché puoi tenere in mano una funzione e passarla che puoi dire fai questo, più tardi. Le due idee sono intrecciate.
Voglio mostrarti l'altra faccia quotidiana, perché la usi di continuo. C'è un altro modo in cui questo si vede tutti i giorni: dire per ogni elemento di questa lista, fai questo. Dove questo è, di nuovo, una funzione che passi. Invece di scrivere a mano un ciclo che ripete, consegni a una lista un pezzo di comportamento e le dici applicalo a ciascuno dei tuoi elementi. Filtrare, trasformare, sommare: sono tutte cose che fai passando il comportamento come valore. È lo stile nativo di JavaScript, il suo modo naturale di esprimersi. Le funzioni che girano di mano in mano sono ovunque, nel suo codice.
Voglio darti l'immagine che rende chiara questa idea, perché è vivida. Immagina uno strumento a cui di solito dai dei materiali, degli ingredienti. Le funzioni come valori ti permettono di dargli anche le istruzioni stesse, come se fossero materiali. È come dare a un robot non solo gli ingredienti, ma la scheda della ricetta, che lui poi segue. E le schede delle ricette puoi tenerle in un cassetto, spedirle, passarne una da un robot a un altro. Il comportamento diventa una cosa che puoi tenere in mano, mettere via, consegnare. Non più solo verbi da eseguire sul posto, ma oggetti da maneggiare.
Voglio trarre la lezione generale, perché va oltre JavaScript. C'è un'idea profonda, qui: trattare le azioni stesse come cose che puoi tenere e passare in giro, non solo i dati su cui agiscono, sblocca un modo flessibile e componibile di costruire. Quando il comportamento è un valore, puoi assemblare programmi consegnandoti pezzi di comportamento gli uni con gli altri, montandoli come mattoncini. È un modo di pensare che nasce da lontano, dai linguaggi funzionali che hanno ispirato JavaScript, e che ne è diventato l'anima. Le cose che facciamo, e non solo le cose su cui le facciamo, possono essere afferrate e maneggiate.
Per oggi ci fermiamo qui. Abbiamo incontrato uno dei tratti più definitori di JavaScript: le funzioni si tengono in mano. Una funzione non è solo un blocco da chiamare: è un valore che sa fare qualcosa, che puoi mettere in una variabile, passare, restituire, conservare. E questo sblocca il passare in giro il comportamento, non solo i dati: ecco cosa fare quando hai finito, ecco cosa fare per ogni elemento. È proprio ciò che rende possibile la danza del ciclo degli eventi, e lo stile quotidiano di JavaScript. Come dare a un robot non gli ingredienti, ma la scheda della ricetta. La lezione: trattare le azioni come cose da tenere e passare sblocca un modo componibile di costruire. Nella prossima puntata vediamo una magia più sottile: funzioni che ricordano. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.