Per poter capire le Higher-Order functions in JavaScript è bene partire da un esempio
function calcola(numeri) { let totale = 0; for (const num of numeri) { totale = totale + num; } return totale; } calcola([1, 1, 1]);
Quella appena presentata è una normale funzione a cui fornendo un array di numeri, ne restituiamo la somma degli elementi. In ottica di sviluppo è una funzionalità molto ristretta, adatta ad un singola circostanza: la somma di più numeri. Come possiamo renderla più generica, consentendo la possibilità di eseguire più operazioni?
In JavaScript, diversamente dagli altri linguaggi, le funzioni sono tipi primitivi, supportano cioè tutte le operazioni disponibili anche per gli altri tipi di variabili/oggetti, possono essere dichiarate come variabili, passate come input ad altre funzioni o restituite come valore di ritorno. Non è infatti raro trovare una funzione dichiarata in questo modo
const ciao = function() { return 'Ciao!' }; var s = ciao();
A questo punto possiamo capire cosa sia una Higher-Order function: una funzione che prevede come parametro in ingresso o di ritorno un'altra funzione. L'esempio iniziale può essere dunque generalizzato come segue.
// Higher-Order function function calcola(ops, valoreIniziale, numeri) { let totale = valoreIniziale; for (const num of numeri) { totale = ops(totale,num); } return totale; } // First-order functions function somma(n1, n2) { return n1 + n2; } function moltiplica(n1, n2) { return n1 * n2; } calcola(somma,0,[1, 1, 1]); calcola(moltiplica,1,[1, 2, 3]);
Questa pratica è molto utilizzata nel JavaScript, basti pensare alle funzioni array.map() o element.addEventListener('click', handler), la stessa funzione presa in esempio oggi svolge le medesime operazioni di array.reduce().
La conoscenza delle Higher-Order functions è importante per ogni sviluppatore in quanto permette di semplificare la complessità del codice, aumentandone la leggibilità.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Organizzare il codice JavaScript utilizzando i moduli
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Sfruttare lo streaming di una chiamata Http da Blazor
Effettuare il download di un file via FTP con la libreria FluentFTP di .NET
Creare automaticamente una issue di GitHub
Utilizzare ChatGPT con Azure OpenAI
Specificare il versioning nel path degli URL in ASP.NET Web API
Controllare gli accessi IP alle app con Azure Container Apps
GitHub <3 .NET
Ottimizzare il codice JavaScript utilizzando WeakMap e WeakSet
Utilizzare flat e flatMap per appiattire array innestati in array
I più letti di oggi
- .NET Conference Italia 2023 - Milano e Online
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Microsoft Visual Studio Code: un nuovo editor gratuito per Windows, MacOSX e Linux per sviluppatori ASP.NET e Node.js
- Registrare servizi multipli tramite chiavi in ASP.NET Core 8
- Chiamare direttamente un numero di telefono con HTML5