You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/07-optional-chaining/article.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,14 +25,14 @@ Questo è il risultato che ci si aspetta. JavaScript funziona in questo modo. Se
25
25
26
26
Nella maggior parte dei casi, preferiremmo avere `undefined` piuttosto di un errore (con il significato "nessuna via").
27
27
28
-
... Un altro esempio. Il metodo `document.querySelector('.elem')`restituisce un oggetto che corrisponde ad un elemento della pagina web, che ritorna `null` quando l'elemento non esite.
28
+
... Un altro esempio. Il metodo `document.querySelector('.elem')`ritorna un oggetto che corrisponde ad un elemento della pagina web, che ritorna `null` quando l'elemento non esite.
29
29
30
30
```js run
31
31
// document.querySelector('.elem') è null se non esiste l'elemento
32
32
let html =document.querySelector('.elem').innerHTML; // errore se è null
33
33
```
34
34
35
-
Di nuovo, se un elemente non esiste, otterremo un errore nel tentativo di accedere a `.innerHTML` di `null`. In alcuni casi, in cui l'assenza di un elemento è normale, vorremo evitare l'errore e accettare come risultato che `html = null`.
35
+
Di nuovo, se un elemente non esiste, otterremo un errore nel tentativo di accedere a `.innerHTML` di `null`. In alcuni casi, in cui l'assenza di un elemento è normale, vorremo evitare l'errore e accettare come risultato `html = null`.
36
36
37
37
Come possiamo farlo?
38
38
@@ -56,7 +56,7 @@ let user = {}; // l'utente non ha address
Questo è semplicemente terribile, un codice del genere potrebbe anche essere difficile da comprendere.
59
+
Questo è semplicemente terribile, un codice del genere potrebbe essere difficile da comprendere.
60
60
61
61
Ci sarebbe un modo migliore per riscriverlo, utilizzando l'operatore `&&`:
62
62
@@ -70,7 +70,7 @@ Concatenare con `&&` l'intero percorso verso la proprietà ci assicura che tutti
70
70
71
71
Come potete vedere, il nome della proprietà è ancora duplicato nel codice. Ad esempio, nel codice sopra, `user.address` è ripetuto tre volte.
72
72
73
-
Questo è il motivo per cui la concatenazione opzionale `?.`, è stata aggiunta al linguaggio. Per risolvere questo problema una volta per tutte!
73
+
Questo è il motivo per cui la concatenazione opzionale `?.` è stata aggiunta al linguaggio. Per risolvere questo problema una volta per tutte!
74
74
75
75
## Concatenazione opzionale
76
76
@@ -108,7 +108,7 @@ Ad esempio in `user?.address.street.name` il costrutto `?.` permette alla propri
108
108
```warn header="Non abusate della concatenazione opzionale"
109
109
Dovremmo utilizzare `?.` solamente quando va bene che una proprietà possa non esistere.
110
110
111
-
Ad esempio, guardando la logica del nostro codice, l'oggetto `user` deve necessariamente esistere, mentre `address` è opzionale, quindi dovremmo scrivere `user.address?.street`, non `user?.address?.street`.
111
+
Ad esempio, considerando la logica del nostro codice, l'oggetto `user` deve necessariamente esistere, mentre `address` è opzionale, quindi dovremmo scrivere `user.address?.street`, non `user?.address?.street`.
112
112
113
113
Quindi, se `user` dovesse essere `undefined` per errore, otterremo un errore e potremmo sistemarlo. Altrimenti, gli errori di programmazione potrebbero essere silenziati in modo non appropriato, rendendo il debug molto difficile.
114
114
```
@@ -125,7 +125,7 @@ La variabile deve essere dichiarata (ad esempio come `let/const/var user` o come
125
125
126
126
## Corto circuito
127
127
128
-
Come detto in precedenza, il costrutto `?.` interrompe immediatamente (manda in "corto circuito") la valutazione, se la proprietà a destra non esiste.
128
+
Come detto in precedenza, il costrutto `?.` interrompe immediatamente (manda in "corto circuito") la valutazione se la proprietà a destra non esiste.
129
129
130
130
Quindi, nel caso ci siano ulteriori chiamate a funzione o side-effects, questi non verranno elaborati.
131
131
@@ -170,7 +170,7 @@ Qui, in entrambe le righe, come prima cosa abbiamo utilizzato il punto (`user1.a
170
170
171
171
Successivamente `?.()` controlla la parte sinistra: se la funzione `admin` esiste, allora viene eseguita (ciò che accade con `user1`). Altrimenti (con `user2`) la valutazione si interrompe senza errori.
172
172
173
-
La sintassi `?.[]` funziona anche se volessimo usare le parentesi `[]`per accedere alle proprietà, invece del punto `.`. In maniera simile ai casi precedenti, potremmo accedere con sicurezza ad una proprietà di un oggetto, che potrebbe non esistere.
173
+
La sintassi `?.` funziona anche con le parentesi `[]`(invece del punto `.`). Come nei casi precedenti, possiamo accedere con sicurezza ad una proprietà di un oggetto che potrebbe non esistere.
Come possiamo vedere, le tre forme sono semplici da utilizzare. Il costrutto `?.` verifica che la parte sinistra non sia `null/undefined` e permette alla valutazione di proseguire in caso contrario.
216
+
Come possiamo vedere, le tre forme sono semplici da utilizzare. Il costrutto `?.` verifica che la parte sinistra non sia `null/undefined`; se non lo è, permette alla valutazione di proseguire, altrimenti interrompe immediatamente la valutazione.
217
217
218
-
La concatenazione di `?.` permette di accedere in sicurezza alle proprietà annidate.
218
+
La concatenazione di `?.` permette di accedere in sicurezza a proprietà annidate.
219
219
220
220
In ogni caso, dovremmo applicare `?.` con prudenza, solamente nei casi in cui è accettabile che la parte sinistra possa non esistere. In questo modo evitiamo di nascondere errori di programmazione, nel caso ce ne siano.
0 commit comments