Skip to content

Commit fb9c615

Browse files
longo-andreapasor1
andauthored
Apply suggestions from code review
Co-authored-by: Simone Pasini <66781510+pasor1@users.noreply.github.com>
1 parent 054e017 commit fb9c615

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

1-js/99-js-misc/03-currying-partials/article.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ libs:
55

66
# Currying
77

8-
Il [currying](https://en.wikipedia.org/wiki/Currying) è una tecnica avanzata che si applica durante lo sviluppo di funzioni. Non viene utilizzata solamente in JavaScript, ma anche in altri linguaggi di programmazione.
8+
Il [currying](https://en.wikipedia.org/wiki/Currying) è una tecnica avanzata che si applica alle funzioni. Non viene utilizzata solamente in JavaScript, ma anche in altri linguaggi di programmazione.
99

10-
Il currying è una trasformazione delle funzioni, in cui si traduce una funzione invocabile come `f(a, b, c)` in una invocabile come `f(a)(b)(c)`.
10+
Il currying è una trasformazione che traduce una funzione invocabile come `f(a, b, c)` in una invocabile come `f(a)(b)(c)`.
1111

1212
Il currying non invoca la funzione. Si occupa solamente della sua trasformazione.
1313

14-
Come prima cosa vediamo un esempio, in modo da capire di cosa stiamo parlando, e le sue applicazioni nella pratica.
14+
Come prima cosa vediamo un esempio, in modo da capire di cosa stiamo parlando, e le applicazioni nella pratica.
1515

1616
Creeremo una funzione di supporto `curry(f)` che esegue il currying per una funzione a due argomenti `f`. In altre parole, `curry(f)`, trasformerà `f(a, b)` in una funzione invocabile come `f(a)(b)`:
1717

@@ -59,7 +59,7 @@ alert( curriedSum(1)(2) ); // 3, invocata parzialmente
5959

6060
Per poterne comprendere i benefici abbiamo bisogno di un esempio di applicazione reale.
6161

62-
Ad esempio, abbiamo una funzione di logging `log(date, importance, message)` che formatta e ritorna le informazioni. In un progetto reale una funzione del genere ha diverse funzionalità utili, come l'invio di log in rete, qui useremo semplicemente un `alert`:
62+
Ad esempio, abbiamo una funzione di logging `log(date, importance, message)` che formatta e ritorna le informazioni. In un progetto reale, una funzione del genere ha diverse funzionalità utili, come l'invio di log in rete, qui useremo semplicemente un `alert`:
6363

6464
```js
6565
function log(date, importance, message) {
@@ -85,7 +85,7 @@ log(new Date(), "DEBUG", "some debug"); // log(a, b, c)
8585
log(new Date())("DEBUG")("some debug"); // log(a)(b)(c)
8686
```
8787

88-
Ora possiamo creare una funzione utile per i logs attuali:
88+
Ora possiamo creare una funzione utile per registrare i logs:
8989

9090
```js
9191
// logNow sarà la versione parziale di log con il primo argomento fisso
@@ -97,7 +97,7 @@ logNow("INFO", "message"); // [HH:mm] INFO message
9797

9898
Ora `logNow` equivale a `log` con il primo argomento fissato, in altre parole, una "funzione applicata parzialmente" o "parziale" (più breve).
9999

100-
Possiamo anche andare oltre, e creare una funzione utile per i logs di debug attuali:
100+
Possiamo anche andare oltre, e creare una funzione utile per registrare i logs di debug:
101101

102102
```js
103103
let debugNow = logNow("DEBUG");
@@ -111,7 +111,7 @@ Quindi:
111111

112112
## Implementazione avanzata del currying
113113

114-
Nel caso in cui vogliate entrare più nel dettaglio, di seguito vediamo un'implementazione "avanzata" del currying per funzioni con più argomenti che avremmo potuto usare sopra.
114+
Nel caso in cui vogliate entrare più nel dettaglio, di seguito vediamo un'implementazione "avanzata" del currying per funzioni con più argomenti, che avremmo anche potuto usare sopra.
115115

116116
E' piuttosto breve:
117117

@@ -147,7 +147,7 @@ alert( curriedSum(1)(2)(3) ); // 6, currying completo
147147

148148
La funzione `curry` può sembrare complicata, ma in realtà è piuttosto semplice da capire.
149149

150-
Il risultato dell'invocazione `curry(func)` è il wrapper `curried` (che ha subito il processo di curryiong), ed appare in questo modo:
150+
Il risultato dell'invocazione `curry(func)` è il wrapper `curried` (che ha subito il processo di currying), ed appare in questo modo:
151151

152152
```js
153153
// func è la funzionie trasformata
@@ -165,9 +165,9 @@ function curried(...args) {
165165
Quando la eseguiamo, ci sono due percorsi di esecuzione `if`:
166166

167167
1. Se il numero di `args` forniti è uguale o maggiore rispetto a quelli che la funzione originale ha nella sua definizione (`func.length`), allora gli giriamo semplicemente l'invocazione utilizzando `func.apply`.
168-
2. Altrimenti, otterremo un parziale: non invochiamo ancora `func`. Invece, un altro wrapper viene ritornato, che riapplicherà il `curried` fornendo gli argomenti precedenti insieme a quelli nuovi.
168+
2. Altrimenti, otterremo un parziale: non invochiamo ancora `func`. Invece, viene ritornato un altro wrapper, che riapplicherà il `curried` passando gli argomenti precedenti insieme a quelli nuovi.
169169

170-
Successivamente, se la invochiamo, di nuovo avremmo o una nuova funzione parziale (se non vengono forniti abbastanza argomenti) oppure otteremo il risultato.
170+
Quindi, se la invochiamo, di nuovo, avremo o una nuova funzione parziale (se non vengono forniti abbastanza argomenti) oppure otterremo il risultato.
171171

172172
```smart header="Solo funzioni di lunghezza fissa"
173173
Il currying richiede che la funzione abbia un numero fissato di argomenti.
@@ -183,6 +183,6 @@ Ma la maggiora parte delle implementazioni in JavaScript sono più avanzate di c
183183

184184
## Riepilogo
185185

186-
Il *currying* è una trasformazione che rende `f(a,b,c)` invocabile come `f(a)(b)(c)`. Le implementazioni in JavaScript, solitamente, mantengono entrambe le varianti, sia quella normale che quella parziale, se invoca con un numero di argomenti non sufficienti.
186+
Il *currying* è una trasformazione che rende `f(a,b,c)` invocabile come `f(a)(b)(c)`. Le implementazioni in JavaScript, solitamente, mantengono entrambe le varianti, sia quella normale che quella parziale, se il numero di argomenti non è sufficiente.
187187

188188
Il currying permette di ottenere delle funzioni parziali molto semplicemente. Come abbiamo visto nell'esempio del logging, dopo il currying la funzione universale a tre argomenti `log(date, importance, message)` ci fornisce una funzione parziale quando invocata con un solo argomento (come `log(date)`) o due argomenti (come `log(date, importance)`).

0 commit comments

Comments
 (0)