Skip to content

Commit 48a981a

Browse files
Apply suggestions from code review
Co-authored-by: Dorin-David <70648503+Dorin-David@users.noreply.github.com>
1 parent 8d9ef18 commit 48a981a

File tree

1 file changed

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

1 file changed

+11
-11
lines changed

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ Questo è il risultato che ci si aspetta. JavaScript funziona in questo modo. Se
2525

2626
Nella maggior parte dei casi, preferiremmo avere `undefined` piuttosto di un errore (con il significato "nessuna via").
2727

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

3030
```js run
3131
// document.querySelector('.elem') è null se non esiste l'elemento
3232
let html = document.querySelector('.elem').innerHTML; // errore se è null
3333
```
3434

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`.
3636

3737
Come possiamo farlo?
3838

@@ -56,7 +56,7 @@ let user = {}; // l'utente non ha address
5656
alert(user.address ? user.address.street ? user.address.street.name : null : null);
5757
```
5858

59-
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.
6060

6161
Ci sarebbe un modo migliore per riscriverlo, utilizzando l'operatore `&&`:
6262

@@ -70,7 +70,7 @@ Concatenare con `&&` l'intero percorso verso la proprietà ci assicura che tutti
7070

7171
Come potete vedere, il nome della proprietà è ancora duplicato nel codice. Ad esempio, nel codice sopra, `user.address` è ripetuto tre volte.
7272

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!
7474

7575
## Concatenazione opzionale
7676

@@ -108,7 +108,7 @@ Ad esempio in `user?.address.street.name` il costrutto `?.` permette alla propri
108108
```warn header="Non abusate della concatenazione opzionale"
109109
Dovremmo utilizzare `?.` solamente quando va bene che una proprietà possa non esistere.
110110

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`.
112112
113113
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.
114114
```
@@ -125,7 +125,7 @@ La variabile deve essere dichiarata (ad esempio come `let/const/var user` o come
125125
126126
## Corto circuito
127127
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.
129129
130130
Quindi, nel caso ci siano ulteriori chiamate a funzione o side-effects, questi non verranno elaborati.
131131
@@ -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 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.
174174
175175
```js run
176176
let key = "firstName";
@@ -192,7 +192,7 @@ delete user?.name; // cancella user.name se l'utente esiste
192192
```
193193
194194
````warn header="Possiamo utilizzare `?.` per l'accesso e la rimozione sicura, ma non per la scrittura"
195-
La concatenazione opzionale `?.` non ha alcun significato alla sinistra di un assegnazione.
195+
La concatenazione opzionale `?.` non ha alcun significato alla sinistra di un'assegnazione.
196196
197197
Ad esempio:
198198
```js run
@@ -207,14 +207,14 @@ Non è cosi intelligente.
207207
208208
## Riepilogo
209209
210-
La concatenazione opzionale `?.` possiede tre forme:
210+
La concatenazione opzionale `?.` ha tre forme:
211211
212212
1. `obj?.prop` -- ritorna `obj.prop` se `obj` esiste, altrimenti ritorna `undefined`.
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` 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.
217217
218-
La concatenazione di `?.` permette di accedere in sicurezza alle proprietà annidate.
218+
La concatenazione di `?.` permette di accedere in sicurezza a proprietà annidate.
219219
220220
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

Comments
 (0)