Skip to content

Commit 577d580

Browse files
authored
Merge pull request #215 from Dorin-David/Articolo/optional-chaining
revisione articolo optional chaining
2 parents 25dbab4 + 1df1511 commit 577d580

File tree

1 file changed

+10
-10
lines changed
  • 1-js/04-object-basics/07-optional-chaining

1 file changed

+10
-10
lines changed

1-js/04-object-basics/07-optional-chaining/article.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ Il concatenamento opzionale (optional chaining), `?.`, è un modo sicuro di acce
77

88
## Il problema della "proprietà inesistente"
99

10-
Se avete appena cominciato a leggere il tutorial e a imparare JavaScript, forse questo problema non lo avete ancora affrontato, ma è piuttosto comune.
10+
Se avete appena cominciato a leggere questo tutorial e a imparare JavaScript, forse questo problema non lo avete ancora affrontato, ma è piuttosto comune.
1111

1212
Ad esempio, ipotizziamo di avere un oggetto `user`, in cui sono memorizzate le informazioni relative ai nostri utenti.
1313

1414
La maggior parte dei nostri utenti possiedono l'indirizzo nella proprietà `user.address`, la via in `user.address.street`, ma qualcuno potrebbe non averle fornite.
1515

16-
In questo caso, quando proviamo ad accedere a `user.address.street`, e l'utente non possiede un indirizzo, otterremo un errore:
16+
In questo caso, quando proviamo ad accedere a `user.address.street`, e l'utente non possiede un indirizzo, avremo un errore:
1717

1818
```js run
1919
let user = {}; // un utente senza la proprietà "address"
@@ -23,7 +23,7 @@ alert(user.address.street); // Errore!
2323

2424
Questo è il risultato che ci si aspetta. JavaScript funziona in questo modo. Se `user.address` è `undefined`, un tentativo di accesso a `user.address.street` fallirà con un errore.
2525

26-
Nella maggior parte dei casi, preferiremmo avere `undefined` piuttosto di un errore (con il significato "nessuna via").
26+
Nella maggior parte dei casi, preferiremmo avere `undefined` piuttosto di un errore (in questo caso con il significato "nessuna via").
2727

2828
... 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.
2929

@@ -36,7 +36,7 @@ Di nuovo, se un elemente non esiste, otterremo un errore nel tentativo di accede
3636

3737
Come possiamo farlo?
3838

39-
La soluzione più ovvia sarebbe di controllare il valore utilizzando `if` o l'operatore condizionale `?`, prima di accedere alle proprietà, come nell'esempio:
39+
La soluzione più ovvia sarebbe di controllare il valore utilizzando `if` o l'operatore condizionale `?` prima di accedere alle proprietà, come nell'esempio:
4040

4141
```js
4242
let user = {};
@@ -68,15 +68,15 @@ alert( user.address && user.address.street && user.address.street.name ); // und
6868

6969
Concatenare con `&&` l'intero percorso verso la proprietà ci assicura che tutti i componenti esistano (in caso contrario, la valutazione si interrompe), ma non è comunque l'ideale.
7070

71-
Come potete vedere, il nome della proprietà è ancora duplicato nel codice. Ad esempio, nel codice sopra, `user.address` è ripetuto tre volte.
71+
Come potete vedere, i nome delle proprietà sono ancora duplicate nel codice. Ad esempio, nel codice sopra, `user.address` è ripetuto tre volte.
7272

7373
Questo è il motivo per cui la concatenazione opzionale `?.` è stata aggiunta al linguaggio. Per risolvere questo problema una volta per tutte!
7474

7575
## Concatenazione opzionale
7676

7777
La concatenazione opzionale `?.` interrompe la valutazione se il valore prima di `?.` è `undefined` o `null`, e ritorna `undefined`.
7878

79-
**D'ora in poi in questo articolo, per brevità, diremo che qualcosa "esiste" se non è ne `null``undefined`.**
79+
**D'ora in poi, in questo articolo, per brevità diremo che qualcosa "esiste" se non è `null``undefined`.**
8080

8181
In altre parole, `value?.prop`:
8282
- funziona come `value.prop`, se `value` esiste,
@@ -92,7 +92,7 @@ alert( user?.address?.street ); // undefined (nessun errore)
9292
9393
Il codice è corto e pulito, non c'è alcuna duplicazione.
9494
95-
Leggendo l'indirizzo con `user?.address` funzionerebbe anche se l'oggetto `user` non esistesse:
95+
Leggere l'indirizzo con `user?.address` funzionerebbe anche se l'oggetto `user` non esistesse:
9696
9797
```js run
9898
let user = null;
@@ -127,7 +127,7 @@ La variabile deve essere dichiarata (ad esempio come `let/const/var user` o come
127127
128128
Come detto in precedenza, il costrutto `?.` interrompe immediatamente (manda in "corto circuito") la valutazione se la proprietà a destra non esiste.
129129
130-
Quindi, nel caso ci siano ulteriori chiamate a funzione o side-effects, questi non verranno elaborati.
130+
Quindi, nel caso ci siano ulteriori chiamate a funzione o side-effects, questi non verranno eseguiti.
131131
132132
Ad esempio:
133133
@@ -170,7 +170,7 @@ Qui, in entrambe le righe, come prima cosa abbiamo utilizzato il punto (`user1.a
170170
171171
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.
172172
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.
173+
La sintassi `?.` funziona anche con le parentesi `[]` (invece del punto `.`). Come nei casi precedenti, possiamo accedere con sicurezza alla proprietà di un oggetto che potrebbe non esistere.
174174
175175
```js run
176176
let key = "firstName";
@@ -213,7 +213,7 @@ La concatenazione opzionale `?.` ha tre forme:
213213
2. `obj?.[prop]` -- ritorna `obj[prop]` se `obj` esiste, altrimenti ritorna `undefined`.
214214
3. `obj.method?.()` -- invoca `obj.method()` se `obj.method` esiste, altrimenti ritorna `undefined`.
215215
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.
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 la interrompe immediatamente.
217217
218218
La concatenazione di `?.` permette di accedere in sicurezza a proprietà annidate.
219219

0 commit comments

Comments
 (0)