Funzione Currying in JavaScript
prendi un recipiente, aggiungi dell'acqua, aggiungi alcune righe di codice, aggiungi alcune foglie di curry e masala (secondo i tuoi gusti), cuocilo a fuoco basso per 25 minuti e, ecco la funzione curring, pronto per servire in produzione . Sto solo scherzando ragazzi e gol.
Ciaooooo, sviluppatori JS. Sono tornato con un argomento caldo "Function Currying"
Questa storia riguarda:
- cos'è il curry, come funziona e perché viene utilizzato.
La storia inizia qui
Che cos'è una funzione di currying?
currying sta trasformando una funzione che accetta più argomenti [esempio: functionName(a, b,c)] in diverse funzioni che accettano un singolo argomento in una sequenza.
okay okay .., so che suona con-fu-jing (confuso), anche le mie reazioni sono state le stesse quando l'ho letto per la prima volta.
ok facci capire facilmente, una funzione (doSum) che accetta tutti gli argomenti in un colpo solo, ad esempio doSum(a, b, c) [esempio sotto: funzione di addizione normale.
Viene trasformato in diverse funzioni (addNumbers(a), (b), (c)) che accettano un singolo argomento alla volta in una sequenza.
Nota: la funzionalità (scopo) di entrambe le funzioni è la stessa, appena rinominate per una migliore comprensione.
ecco quale funzione è il currying secondo i geek per i geek :
È una tecnica di programmazione funzionale, trasformazione della funzione di più argomenti in più funzioni di un singolo argomento in sequenza.
in parole semplici, la funzione invece di prendere tutti gli argomenti in una volta, la funzione prende il primo argomento e restituisce la funzione che prende l'altro argomento, e poi restituisce un'altra funzione che prende il terzo argomento, e così via fino a quando tutti gli argomenti sono preso (esempio nell'immagine denominata: funzione currying).
Come funziona il curry?
curring in javascript potrebbe essere un po 'complicato da capire in quanto è javascript
ma proviamo a venirne a capo, di seguito è riportato un esempio di una semplice funzione
qui la funzione “doSum” somma l'argomento dato e restituisce la somma di tutti gli argomenti passati.
di seguito è la versione al curry della stessa funzione (appena rinominata, per una migliore comprensione)
l'output della funzione sopra e sotto sarà lo stesso, 18
addNumbers è la versione con curry della funzione precedente doSum, addNumber la funzione genitore prende l'argomento cioè 5 nel nostro caso e restituisce un'altra funzione anonima che prende un altro argomento cioè 6 nel nostro caso e il processo continua fino a quando tutti i parametri sono passati, il l'ultima funzione anonima restituisce il valore dopo aver elaborato tutti gli input.
abbiamo implementato funzioni nidificate nell'esempio precedente, quindi ciascuna delle funzioni prende un argomento e restituisce un'altra funzione fino a quando tutti gli argomenti non sono stati completati.
puoi eseguire il currying della tua funzione in 2 modi diversi, usando la funzione bind e usando le chiusure, vediamo come appare
funzione currying utilizzando la funzione bind
se non sei a conoscenza di cosa sia la funzione bind, controlla questa mia storia .
qui nell'esempio sopra, stiamo usando la funzione bind di javascript, e usando la funzione bind stiamo usando la funzione "onBoardUser".
basicCompanyDetails è simile per tutti gli utenti a bordo, quindi vogliamo rendere disponibili i dettagli per impostazione predefinita per tutti gli utenti che sono a bordo, qui passiamo un argomento "basicCompanyDetails" alla funzione bind e creiamo un'istanza di "onBoardUser", qui la funzione bind restituisce la funzione che è possibile memorizzare in qualche punto della memoria ed eseguirla successivamente, qui stiamo memorizzando la funzione in addUser e stiamo invocando per tutti gli utenti.
questo è il modo in cui puoi correggere la tua funzione usando la funzione bind in javascript. altri esempi nell'immagine sottostante.
puoi anche passare entrambi i parametri mentre chiami il metodo addUserToSales che produrrà gli stessi risultati.
funzione currying utilizzando chiusure.
le chiusure sono un concetto molto comune ma complicato in javascript, ma non discusso molto, puoi dare una lettura su cosa sono le chiusure qui .
proviamo ad implementare la funzione currying usando le chiusure.
nell'esempio precedente, abbiamo creato una funzione "onBoardUser" che accetta un argomento e restituisce un'altra funzione anonima che accetta un altro argomento, riassume i dettagli e restituisce.
stiamo chiamando la funzione "onBoardUser" con un argomento, ad esempio accountDepartmentDetails , e memorizzandola in una variabile (ricorda che onBoardUser restituisce una funzione), quindi memorizziamo una funzione in una variabile addUsertoAccounts e ora la variabile ha una funzione che può essere richiamata in qualsiasi momento con un argomento che sta chiedendo, quindi abbiamo richiamato la funzione anonima (restituita da onBoardUser) memorizzata in addUsertoAccounts con un argomento (dettagli utente, ad esempio detailsOfJohn).
una volta invocata la funzione ha completato l'esecuzione dell'istruzione presente al suo interno e stampato l'output.
se le funzioni fossero invocate anche dopo circa 10.000 righe di codice, stamperebbe lo stesso output, poiché è una chiusura, e ne ricorda l'ambito lessicale.
In corso con ES6:
ecco come puoi usare la funzione currying con le chiusure in JS.
tuttavia, potresti avere una domanda nella tua testa, se possiamo passare più argomenti a una funzione, allora perché abbiamo bisogno di curry?
questo probabilmente risponderà a quei dubbi.
perché viene utilizzato
perché? perché? perché?
- il currying è una tecnica che divide le funzioni in funzioni più piccole, ogni singola funzione ha il suo lavoro e che rende la tua funzione pura e meno soggetta a errori ed effetti collaterali.
- esempio: la prima funzione convalida i dati dell'utente, la seconda i dati dell'azienda, ecc.
- è utilizzato nella programmazione funzionale per utilizzare funzioni di ordine superiore
- ti aiuta a mantenere il tuo codice pulito e organizzato.
- inoltre, puoi usare il currying come meccanismo che ti aiuta a controllare di avere tutto prima di procedere
- esempio: ogni funzione nidificata non verrà eseguita se non ottiene gli argomenti richiesti.

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































