![]() |
Il currying è una tecnica avanzata ma molto utile nella programmazione funzionale. In JavaScript, permette di trasformare una funzione che accetta più argomenti in una sequenza di funzioni che accettano un solo argomento alla volta. Vediamo insieme cosa significa, perché può essere utile e come implementarlo.
📌 Cos’è il currying?
Il currying è una tecnica che trasforma una funzione che prende più parametri in una serie di funzioni, ognuna delle quali prende un solo parametro.
In altre parole, invece di chiamare una funzione passando tutti i parametri insieme, la chiamiamo una alla volta, restituendo funzioni intermedie che aspettano il parametro successivo.
Funzione classica (non curried)
function somma(a, b) {
return a + b;
}
console.log(somma(2, 3)); // 5
Stessa funzione, riscritta con currying
function sommaCurried(a) {
return function(b) {
return a + b;
};
}
console.log(sommaCurried(2)(3)); // 5
Come vedi:
sommaCurried(2)restituisce una funzione che aspetta il secondo parametrob.- Chiamando subito questa funzione con
(3)otteniamo il risultato.
✅ Perché usare il currying?
Il currying ti permette di "precompilare" alcune parti di una funzione, creando nuove funzioni più specifiche e riutilizzabili.
Questo è molto utile quando:
- Vuoi creare versioni “personalizzate” di funzioni generiche.
- Vuoi evitare di ripetere valori fissi in più punti del codice.
- Vuoi scrivere codice più modulare e pulito.
Vantaggi:
-
Riutilizzabilità: puoi creare versioni specializzate di funzioni.
-
Composizione: si integra bene con altre funzioni funzionali.
-
Chiarezza: favorisce una scrittura più leggibile e modulare.
✖️ Quando NON usarlo
Sebbene il currying sia potente, non è sempre necessario. Evitalo quando:
-
Il codice diventa meno leggibile.
-
Il numero di parametri varia frequentemente.
-
La funzione è molto semplice e usata una sola volta.
🧪 5 esempi concreti di currying in azione
1. Personalizzare messaggi con funzioni parziali
function creaMessaggio(tipo) {
return function(nomeUtente) {
if (tipo === "benvenuto") {
return "Ciao " + nomeUtente + ", benvenuto!";
} else if (tipo === "errore") {
return "Ciao " + nomeUtente + ", si è verificato un errore.";
} else {
return "Ciao " + nomeUtente + "!";
}
};
}
const messaggioBenvenuto = creaMessaggio("benvenuto");
const messaggioErrore = creaMessaggio("errore");
console.log(messaggioBenvenuto("Luca")); // Ciao Luca, benvenuto!
console.log(messaggioErrore("Anna")); // Ciao Anna, si è verificato un errore.
Usa il currying per creare messaggi specifici, riutilizzabili in più parti del codice.
2. Configurare funzioni per inviare email
function inviaEmail(mittente) {
return function(destinatario, messaggio) {
return `Da: ${mittente}\nA: ${destinatario}\nMessaggio: ${messaggio}`;
};
}
const emailDaMario = inviaEmail("mario@example.com");
console.log(emailDaMario("anna@example.com", "Ciao Anna, come stai?"));
In questo modo puoi creare facilmente funzioni preconfigurate per diversi mittenti.
3. Calcolare prezzi scontati
function calcolaPrezzoScontato(scontoPercentuale) {
return function(prezzo) {
return prezzo - (prezzo * scontoPercentuale / 100);
};
}
const sconto10 = calcolaPrezzoScontato(10);
const sconto20 = calcolaPrezzoScontato(20);
console.log(sconto10(100)); // 90
console.log(sconto20(100)); // 80
Puoi creare funzioni specializzate per ogni tipo di sconto da usare in modo chiaro e semplice.
4. Preparare richieste HTTP con parametri fissi
function creaRequest(urlBase) {
return function(endpoint, metodo) {
return `Invio richiesta ${metodo} a ${urlBase}${endpoint}`;
};
}
const apiItalia = creaRequest("https://api.italia.it/");
console.log(apiItalia("meteo", "GET")); // Invio richiesta GET a https://api.italia.it/meteo
console.log(apiItalia("traffico", "POST")); // Invio richiesta POST a https://api.italia.it/traffico
Currying ti permette di configurare in anticipo parametri come la base URL.
5. Gestire permessi utente
function controllaPermesso(ruolo) {
return function(azione) {
const permessi = {
admin: ["leggi", "scrivi", "cancella"],
utente: ["leggi", "scrivi"],
ospite: ["leggi"]
};
return permessi[ruolo] && permessi[ruolo].includes(azione);
};
}
const adminHaPermesso = controllaPermesso("admin");
const ospiteHaPermesso = controllaPermesso("ospite");
console.log(adminHaPermesso("cancella")); // true
console.log(ospiteHaPermesso("scrivi")); // false
Funzioni chiare e modulabili per verificare permessi senza duplicare codice.
🎯 Conclusione
Il currying è una tecnica semplice ma potente per scrivere codice JavaScript più chiaro, modulare e riutilizzabile.
Permette di fissare in anticipo alcuni parametri di una funzione, creando nuove funzioni personalizzate per i tuoi casi d’uso.
Follow me #techelopment
Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment
