Skip to content

Commit f595cca

Browse files
authored
Merge pull request #249 from Dorin-David/Article/keys-values-entries
review Destructuring assignment
2 parents 3def821 + 042b4c5 commit f595cca

File tree

2 files changed

+37
-45
lines changed

2 files changed

+37
-45
lines changed

1-js/05-data-types/10-destructuring-assignment/1-destruct-user/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ Scrivete l'assegnamento di destrutturazione che legge:
1717

1818
- la proprietà `name` nella variabile `name`.
1919
- la proprietà `years` nella variabile `age`.
20-
- la proprietà `isAdmin` nella variabile `isAdmin` (falsa se assete)
20+
- la proprietà `isAdmin` nella variabile `isAdmin` (falsa se assente)
2121

2222
I valori dopo l'assegnazione dovrebbero essere:
2323

2424
```js
2525
let user = { name: "John", years: 30 };
2626

27-
// your code to the left side:
27+
// il tuo codice a sinistra:
2828
// ... = user
2929

3030
alert( name ); // John

1-js/05-data-types/10-destructuring-assignment/article.md

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ Le due strutture dati più utilizzate in JavaScript sono `Object` e `Array`.
55
- Gli oggetti ci consentono di creare un'unica entità che memorizza elementi nel formato chiave-valore
66
- Gli array ci consentono di raccogliere elementi in elenchi ordinati.
77

8-
A volte, quando li passiamo ad una funzione, potrebbe non èssere necessario tutto l'oggetto/array, ma solo una parte di esso.
8+
A volte, quando li passiamo ad una funzione, potrebbe non essere necessario tutto l'oggetto/array, ma solo una parte di esso.
99

10-
*L'assegnamento di destrutturazione (Destructuring assignment)* è una speciale sintassi che ci consente di "spacchettare" oggetti o array in un gruppi di variabili, questo a volte risulta molto conveniente.
10+
*L'assegnamento di destrutturazione (Destructuring assignment)* è una speciale sintassi che ci consente di "spacchettare" oggetti o array in gruppi di variabili; questo a volte risulta molto conveniente.
1111

1212
La destrutturazione funziona alla grande anche con funzioni complesse che hanno molti parametri, valori predefiniti e così via. Presto lo vedremo.
1313

@@ -30,7 +30,7 @@ alert(firstName); // John
3030
alert(surname); // Smith
3131
```
3232

33-
Ora possiamo lavorare con le variabili piuttosto che con i membri dell'array.
33+
Ora possiamo lavorare con le variabili invece che con gli elementi dell'array.
3434

3535
Risulta utilissima se combinata con `split` o altri metodi che ritornano un array:
3636

@@ -44,7 +44,7 @@ Come puoi vedere, la sintassi è semplice. Ci sono però molti dettagli peculiar
4444

4545

4646
````smart header="\"Destrutturazione\" non significa \"distruzione\"."
47-
Viene chiamato "assegnamento di destrutturazione", perché "destrutturizza" copiando gli elementi all'interno di variabili. Ma l'array in non viene modificato.
47+
Viene chiamato "assegnamento di destrutturazione" perché "destruttura" copiando gli elementi all'interno di variabili. Ma l'array in non viene modificato.
4848
4949
E' solo un modo breve per scrivere:
5050
```js
@@ -56,7 +56,7 @@ let surname = arr[1];
5656

5757
````smart header="Ignora gli elementi usando la virgola"
5858
59-
Gli elementi indesiderati dell'array possono anche essere ignorati tramite una virgola aggiuntiva:
59+
Gli elementi indesiderati dell'array possono essere ignorati tramite una virgola aggiuntiva:
6060
6161
```js run
6262
*!*
@@ -67,24 +67,24 @@ let [firstName, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic
6767
alert( title ); // Consul
6868
```
6969
70-
Nel codice sopra, il secondo elemento viene saltato, il terzo viene assegnato a `title`, il resto dell'array viene ignorato (visto che sono state inserite ulteriori variabili).
70+
Nel codice sopra, il secondo elemento viene saltato, il terzo viene assegnato a `title`, il resto degli elementi vengono ignorati (visto che per loro non ci sono variabili).
7171
````
7272

73-
````smart header="Funziona con qualsiasi itarabile sulla destra"
73+
````smart header="Funziona con qualsiasi iterabile alla destra"
7474
75-
... In realtà, possiamo utilizzarlo con qualsiasi iterabile, non solamente con array:
75+
... In realtà, possiamo utilizzarlo con qualsiasi iterabile, non solamente con un array:
7676
7777
```js
7878
let [a, b, c] = "abc"; // ["a", "b", "c"]
7979
let [one, two, three] = new Set([1, 2, 3]);
8080
```
8181
82-
Funziona, perché internamente un'assegnazione di destrutturazione lavora iterando sul valore di destra. E' una specie di "zucchero sintattico" per chiamare `for..of` sul valore a destra di `=` assegnando i valori.
82+
Funziona, perché internamente un'assegnazione di destrutturazione lavora iterando sul valore a destra. E' una specie di "zucchero sintattico" per chiamare `for..of` sul valore a destra di `=`, assegnandone i valori.
8383
````
8484

8585
````smart header="Assegna a qualsiasi cosa ci sia dalla parte sinistra"
8686
87-
Possiamo inserire qualsiasi cosa sia "assegnabile" alla sinistra.
87+
Possiamo inserire qualsiasi cosa "assegnabile" a sinistra.
8888
8989
Ad esempio, la proprietà di un oggetto:
9090
```js run
@@ -101,7 +101,7 @@ alert(user.surname); // Smith
101101
102102
Nel capitolo precedente abbiamo visto il metodo [Object.entries(obj)](mdn:js/Object/entries).
103103
104-
Possiamo utilizzarlo con la destrutturazione per eseguire cicli su chiave/valore di un oggetto:
104+
Possiamo utilizzarlo con la destrutturazione per eseguire cicli sulle coppie chiave/valore di un oggetto:
105105
106106
```js run
107107
let user = {
@@ -117,7 +117,7 @@ for (let [key, value] of Object.entries(user)) {
117117
}
118118
```
119119
120-
Codice simile usando `Map` è più semplice, visto che è iterabile:
120+
Un codice simile usando `Map` è più semplice, visto che è iterabile:
121121
122122
123123
```js run
@@ -151,8 +151,8 @@ let admin = "Pete";
151151
alert(`${guest} ${admin}`); // Pete Jane (scambiati con successo!)
152152
```
153153

154-
Nell'esempio creiamo un array temporaneo di due varibili e lo destrutturiamo immediatamente invertendo l'ordine delle variabili.
155-
Nello stesso modo potemmo scambiare i valori di più di sue variabili.
154+
Nell'esempio creiamo un array temporaneo con due varibili e lo destrutturiamo immediatamente invertendo l'ordine delle variabili.
155+
Nello stesso modo potremmo scambiare i valori di più variabili.
156156

157157

158158
### L'operatore rest '...'
@@ -171,23 +171,23 @@ alert(name2); // Caesar
171171

172172
```
173173

174-
Se vogliamo anche ottenere tutto ciò che segue, possiamo aggiungere un altro parametro che raccoglie "il resto" utilizzando tre punti `" ... "`:
174+
Se vogliamo ottenere anche tutto ciò che segue, possiamo aggiungere un altro parametro che raccoglie "il resto" utilizzando tre punti `" ... "`:
175175

176176
```js run
177177
let [name1, name2, *!*...rest*/!*] = ["Julius", "Caesar", *!*"Consul", "of the Roman Republic"*/!*];
178178
179179
*!*
180-
// rest è un array di elementi, che parte dal terzo
180+
// rest è un array con gli elementi a destra, partendo dal terzo
181181
alert(rest[0]); // Consul
182182
alert(rest[1]); // of the Roman Republic
183183
alert(rest.length); // 2
184184
*/!*
185185
```
186186

187187

188-
La variabile `rest` è un array dei valori dell'array rimanenti.
188+
La variabile `rest` è un array con i valori rimanenti dell'array a destra.
189189

190-
Possiamo utilizzare qualsiasi altro nome di variabile al posto di `rest`, è sufficiente accertarsi di inserire i tre punti prima del nome e di posizionarlo alla fine nell'assegnamento di destrutturazione.
190+
Possiamo utilizzare qualsiasi altro nome di variabile al posto di `rest`; è sufficiente accertarsi di inserire i tre punti prima del nome e di posizionarlo alla fine nell'assegnamento di destrutturazione.
191191

192192
```js run
193193
let [name1, name2, *!*...titles*/!*] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];
@@ -275,10 +275,10 @@ L'ordine non ha importanza. Questo codice funzionerebbe comunque:
275275
let {height, width, title} = { title: "Menu", height: 200, width: 100 }
276276
```
277277

278-
Il pattern alla sinistra potrebbe essere anche più complesso e specificare una mappatura tra proprietà e variabili.
278+
Il pattern a sinistra potrebbe essere anche più complesso e specificare una mappatura tra proprietà e variabili.
279279

280280

281-
Se volessimo assegnare una proprietà ad una variabile con un altro nome, ad esempio, la proprietà `options.width` vogliamo assegnarla ad una variabile chiamata `w`, allora possiamo specificarlo con i due punti:
281+
Se volessimo assegnare una proprietà ad una variabile con un altro nome, ad esempio la proprietà `options.width` ad una variabile chiamata `w`, allora possiamo specificarlo con i due punti:
282282

283283

284284
```js run
@@ -370,9 +370,9 @@ alert(title); // Menu
370370

371371
### Il modello rest "..."
372372

373-
Cosa succede se l'oggetto possiede più proprietà delle variabili da noi fornite? Possiamo prendere solamente alcune ed assegnare tutto ciò che avanza da un'altra parte?
373+
Cosa succede se l'oggetto possiede più proprietà delle variabili da noi fornite? Possiamo prenderne solamente alcune ed assegnare tutto ciò che avanza da un'altra parte?
374374

375-
La specifica per l'utilizzo dell'operatore resto (tre punti) fa quasi parte dello standard, ma molti browser non lo supportano ancora.
375+
La specifica per l'utilizzo dell'operatore rest `...` fa quasi parte dello standard, ma molti browser non lo supportano ancora.
376376

377377
Appare cosi:
378378

@@ -452,7 +452,7 @@ let {
452452
width,
453453
height
454454
},
455-
items: [item1, item2], // assegniamo gli item qui
455+
items: [item1, item2], // assegniamo gli items qui
456456
title = "Menu" // non presente nell'oggetto (viene utilizzato il valore di default)
457457
} = options;
458458

@@ -463,21 +463,13 @@ alert(item1); // Cake
463463
alert(item2); // Donut
464464
```
465465
466-
L'intero oggetto `options` ad eccezione di `extra` il quale non viene menzionato, viene assegnato alle corrispondenti variabili.
467-
468-
Nota che `size` e `items` stesso non è destrutturato.
466+
L'intero oggetto `options` ad eccezione di `extra`, il quale non viene menzionato, viene assegnato alle corrispondenti variabili.
469467
470468
![](destructuring-complex.svg)
471469
472-
Infine, abbiamo `width`, `height`, `item1`, `item2` e `title` che assumo il valore di default.
473-
474-
Questo accade spesso con l'assegnamento di destrutturazione. Abbiamo un oggetto complesso e vogliamo estrarre solamente ciò di cui abbiamo bisogno.
470+
Infine, abbiamo `width`, `height`, `item1`, `item2` e `title` che assumono il valore di default.
475471
476-
Anche qui accade lo stesso:
477-
```js
478-
// prende size per interno su una variabile, ignora il resto
479-
let { size } = options;
480-
```
472+
Nota che non ci sono variabili per `size` e `items`: prendiamo invece il loro contenuto. Questo accade spesso con l'assegnamento di destrutturazione. Abbiamo un oggetto complesso e vogliamo estrarre solamente ciò di cui abbiamo bisogno.
481473
482474
## Parametri di funzione intelligenti
483475
@@ -491,7 +483,7 @@ function showMenu(title = "Untitled", width = 200, height = 100, items = []) {
491483
}
492484
```
493485
494-
Nella vita reale, il problema è ricordarsi l'ordine degli argomenti. Solitamente gli IDE ci aiutano in questo, specialmente se il codice è ben documentato, ma ancora... Un ulteriore problema è quello di chiamare una funzione nel caso in cui molti parametri ci vadano bene di default.
486+
Nella vita reale, il problema è ricordarsi l'ordine degli argomenti. Solitamente gli IDE ci aiutano in questo, specialmente se il codice è ben documentato, eppure... Un ulteriore problema è quello di chiamare una funzione nel caso in cui molti parametri ci vadano bene di default.
495487
496488
Come qui?
497489
@@ -504,7 +496,7 @@ E' brutto a vedersi. E diventa illeggibile quando il numero di parametri aumenta
504496
505497
La destrutturazione ci viene in soccorso!
506498
507-
Possiamo passare i parametri come un oggetto, e la funzione immediatamente lo destrutturizza in variabili:
499+
Possiamo passare i parametri come un oggetto, e la funzione immediatamente lo destrutturizzerà in variabili:
508500
509501
```js run
510502
// passiamo l'oggetto alla funzione
@@ -513,7 +505,7 @@ let options = {
513505
items: ["Item1", "Item2"]
514506
};
515507

516-
// ...e immediatamente lo espandiamo su variabili
508+
// ...e immediatamente lo distribuisce alle variabili
517509
function showMenu(*!*{title = "Untitled", width = 200, height = 100, items = []}*/!*) {
518510
// title, items – presi da options,
519511
// width, height – valori di default
@@ -556,15 +548,15 @@ function({
556548
})
557549
```
558550

559-
Da notare che la destrutturazione assume che `showMenu()` abbia un argomento. Se vogliamo tutti i valori di default, allora dovremmo specificare un oggetto vuoto:
551+
Da notare che la destrutturazione presuppone che `showMenu()` abbia un argomento. Se vogliamo tutti i valori di default, allora dovremmo specificare un oggetto vuoto:
560552

561553
```js
562-
showMenu({}); // ok, all values are default
554+
showMenu({}); // ok, tutti i valori sono di default
563555

564556
showMenu(); // questo darà errore
565557
```
566558

567-
Possiamo farlo ponendo `{}` il valore di default per l'intera destrutturazione:
559+
Possiamo farlo ponendo `{}` come valore di default per l'intera destrutturazione:
568560

569561

570562
```js run
@@ -576,17 +568,17 @@ function showMenu(*!*{ title = "Menu", width = 100, height = 200 } = {}*/!*) {
576568
showMenu(); // Menu 100 200
577569
```
578570

579-
Nel codice sopra, tutti gli argomenti dell'oggetto sono `{}` di default, quindi ci sarà sempre qualcosa da destrutturare.
571+
Nel codice sopra, l'oggetto degli argomenti è `{}` di default, quindi ci sarà sempre qualcosa da destrutturare.
580572

581573
## Riepilogo
582574

583-
- L'assegnamento di destrutturazione ci consente di mappare un oggetto o un array su alcune variabili.
575+
- L'assegnamento di destrutturazione ci consente di mappare un oggetto o un array passandolo a variabili.
584576
- La sintassi per gli oggetti:
585577
```js
586578
let {prop : varName = default, ...rest} = object
587579
```
588580

589-
Questo significa che la proprietà `prop` dovrebbe andare nella variabile `varName` e, se non esiste alcuan proprietà, allora verrà utilizzato il valore di `default`.
581+
Questo significa che la proprietà `prop` dovrebbe andare nella variabile `varName` e, se non esiste alcuna proprietà, allora verrà utilizzato il valore di `default`.
590582

591583
- La sintassi per gli array:
592584

0 commit comments

Comments
 (0)