Skip to content

Commit de4a0d1

Browse files
authored
Merge pull request #195 from Dorin-David/Articolo/nullish-operator
Articolo/nullish operator
2 parents 50ab36b + 227dcd0 commit de4a0d1

File tree

1 file changed

+28
-29
lines changed
  • 1-js/02-first-steps/12-nullish-coalescing-operator

1 file changed

+28
-29
lines changed

1-js/02-first-steps/12-nullish-coalescing-operator/article.md

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@
22

33
[recent browser="new"]
44

5-
Qui, in questo articolo, diremo che un'espressione è "definita" quando non è né `null``undefined`.
6-
7-
Il nullish coalescing operator è scritto come due punti di domanda `??`.
5+
Il *nullish coalescing operator* è rappresentato da due punti di domanda `??`.
86

97
Il risultato di `a ?? b` è:
108
- se `a` è definito, allora `a`,
119
- se `a` non è definito, allora `b`.
1210

11+
(In questo articolo, diremo che un'espressione è "definita" quando non è né `null``undefined`.)
1312

14-
In altre parole, `??` ritorna il primo argomento se questo non è `null/undefined`. Altrimenti, ritorna il secondo.
13+
In altre parole, tra due operatori `??` ritorna il primo se questo non è `null/undefined`; altrimenti, ritorna il secondo.
1514

16-
Il nullish coalescing operator non è qualcosa di completamente nuovo. È solo un modo più elegante (una migliore sintassi) per recuperare il primo valore "definito" dei due.
15+
Il nullish coalescing operator non è qualcosa di completamente nuovo. È solo un modo più elegante per recuperare il primo valore "definito" tra due operatori.
1716

1817
Possiamo riscrivere `result = a ?? b` usando gli operatori che già conosciamo, nel seguente modo:
1918

@@ -41,18 +40,18 @@ alert(user ?? "Anonymous"); // John
4140
4241
Possiamo anche usare una sequenza di `??` per selezionare, da una lista, il primo valore che non sia `null/undefined`.
4342
44-
Per esempio, supponiamo di avere dei dati relativi ad un utente nelle variabili `firstName`, `lastName` o `nickName`. Tutte queste potrebbero essere non definite, se l'utente dovesse decidere di non inserirne i valori.
43+
Per esempio, supponiamo di avere i dati di un utente nelle variabili `firstName`, `lastName` o `nickName`. Tutte queste potrebbero essere non definite, se l'utente dovesse decidere di non inserirne i valori.
4544
46-
Vorremmo visualizzare il nome dell'utente usando una di queste variabili, oppure mostrare "Anonymous" se tutte queste sono indefinite.
45+
Vorremmo visualizzare il nome dell'utente usando una di queste variabili, oppure mostrare "Anonymous" se nessuna di esse è definita.
4746
48-
Usiamo l'operatore `??`per questo:
47+
Usiamo l'operatore `??`:
4948
5049
```js run
5150
let firstName = null;
5251
let lastName = null;
5352
let nickName = "Supercoder";
5453

55-
// shows the first defined value:
54+
// mostra il primo valore valido:
5655
*!*
5756
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
5857
*/!*
@@ -69,25 +68,25 @@ let firstName = null;
6968
let lastName = null;
7069
let nickName = "Supercoder";
7170

72-
// shows the first truthy value:
71+
// mostra il primo valore vero:
7372
*!*
7473
alert(firstName || lastName || nickName || "Anonymous"); // Supercoder
7574
*/!*
7675
```
7776
78-
L'operatore OR `||` esiste sin dagli inizi di JavaScript, quindi gli sviluppatori lo hanno usato a tale scopo per molto tempo.
77+
L'operatore OR `||` esiste sin dagli inizi di JavaScript e gli sviluppatori lo hanno usato a tale scopo per molto tempo.
7978
80-
D'altro canto, il nullish coalescing operator `??` fu aggiunto in JavaScript recentemente, poichè le persone non erano del tutto felici dell'operatore `||`.
79+
Il nullish coalescing operator `??`, invece, è stato aggiunto recentemente. La ragione è che alcuni sviluppatori non erano del tutto contenti dell'operatore `||`.
8180
8281
L'importante differenza tra essi è la seguente:
8382
- `||` ritorna il primo valore *truthy*.
8483
- `??` ritorna il primo valore *definito*.
8584
86-
In altre parole, `||` non distingue tra `false`, `0`, una stringa vuota `""` e `null/undefined`. Sono tutti, allo stesso modo -- valori "falsy". Se uno tra questi è il primo argomento di `||`, allora otterremo il secondo argomento come risultato.
85+
In altre parole, `||` non distingue tra `false`, `0`, una stringa vuota `""` e `null/undefined`. In contesto booleano sono tutti valori `false`. Se uno di questi è il primo argomento di `||`, verrà ritornato il secondo argomento.
8786
88-
In pratica, però, potremmo voler usare il valore di default solamente quando la variabile è `null/undefined`. È in questo caso che il valore è davvero sconosciuto/non settato.
87+
In pratica, però, potremmo voler usare il valore di default solamente quando la variabile è `null/undefined`. Ovvero quando è veramente non definita: una stringa vuota `''` o `0`, ad esempio, potrebbero tornarci utili.
8988
90-
Per esempio, consideriamo questo:
89+
Per esempio, consideriamo il seguente codice:
9190
9291
```js run
9392
let height = 0;
@@ -96,24 +95,24 @@ alert(height || 100); // 100
9695
alert(height ?? 100); // 0
9796
```
9897
99-
- `height || 100` controlla se `height` possiede un valore "falsy", ed effettivamente così è,
100-
- quindi il risultato è il secondo argomento, `100`.
101-
- `height ?? 100` controlla se `height` è `null/undefined`, ma così non è,
102-
- quindi il risultato è `height` "così com'è", ovvero `0`.
98+
- `height || 100` controlla se `height` ha un valore falso: così è.
99+
- il risultato è dunque il secondo argomento, `100`.
100+
- `height ?? 100` controlla se `height` è `null/undefined`: non lo è.
101+
- quindi il risultato è `height`, ovvero `0`.
103102
104-
Se un'altezza pari a zero è un valore accettabile, allora questo non dovrebbe essere rimpiazzato con il valore di default, quindi `??` fa la cosa giusta.
103+
Se un'altezza pari a zero è un valore accettabile, questo non dovrebbe essere rimpiazzato con il valore di default (il secondo operatore, nel'esempio sopra `100`); in questo caso il *nullish coalescing operator* `??` è la scelta giusta.
105104
106105
## Precedenza
107106
108-
La precedenza dell'operatore `??` è piuttosto bassa: `5` nella [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table). Quindi `??` è valutato prima di `=` e `?`, ma dopo la maggior parte degli altri operatori, come `+`, `*`.
107+
La precedenza dell'operatore `??` è piuttosto bassa: `5` nella [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table). Quindi `??` è valutato prima di `=` e `?`, ma dopo la maggior parte degli altri operatori, come `+` o `*`.
109108
110109
Quindi, se volessimo scegliere un valore tramite l'operatore `??` in un'espressione contenente altri operatori, dovremmo considerare l'utilizzo delle parentesi:
111110
112111
```js run
113112
let height = null;
114113
let width = null;
115114

116-
// important: use parentheses
115+
// importante: utilizzare le parentesi
117116
let area = (height ?? 100) * (width ?? 50);
118117

119118
alert(area); // 5000
@@ -122,24 +121,24 @@ alert(area); // 5000
122121
Altrimenti, se omettessimo le parentesi, siccome `*` ha una precedenza maggiore rispetto a `??`, sarebbe eseguito prima, portando a risultati scorretti.
123122
124123
```js
125-
// without parentheses
124+
// senza parentesi
126125
let area = height ?? 100 * width ?? 50;
127126

128-
// ...works the same as this (probably not what we want):
127+
// ...funziona allo stesso modo del seguente codice (probabilmente non ciò che vogliamo)
129128
let area = height ?? (100 * width) ?? 50;
130129
```
131130
132131
### Usare ?? con && o ||
133132
134133
Per motivi di sicurezza, JavaScript proibisce l'utilizzo di `??` insieme agli operatori `&&` e `||`, a meno che la precedenza non sia esplicitamente specificata tramite l'utilizzo delle parentesi.
135134
136-
Il codice sottostante causa un errore di sintassi:
135+
Il codice sotto causa un errore di sintassi:
137136
138137
```js run
139138
let x = 1 && 2 ?? 3; // Syntax error
140139
```
141140
142-
La limitazione è sicuramente discutibile, ma fu aggiunta alle specifiche del linguaggio con lo scopo di evitare errori di programmazione nel momento in cui le persone hanno iniziato ad utilizzare `??` al posto di `||`.
141+
La limitazione è sicuramente discutibile, ma fu aggiunta alle specifiche del linguaggio -quando le persone hanno iniziato ad utilizzare `??` al posto di `||`- con lo scopo di evitare errori di programmazione.
143142
144143
Per aggirare il problema si possono utilizzare delle parentesi esplicite:
145144
@@ -151,16 +150,16 @@ let x = (1 && 2) ?? 3; // Works
151150
alert(x); // 2
152151
```
153152
154-
## Sommario
153+
## Riepilogo
155154
156155
- Il nullish coalescing operator `??` fornisce una scorciatoia per la scelta del primo valore "definito" da una lista di valori.
157156
158157
È usato per assegnare valori di default alle variabili:
159158
160159
```js
161-
// set height=100, if height is null or undefined
160+
// imposta height = 100 se 'height' è *null* o *undefined*
162161
height = height ?? 100;
163162
```
164163
165-
- L'operatore `??` ha una precedenza molto bassa, solo un po' più alta di `?` e `=`, quindi considerare l'aggiunta di parentesi quando lo si utilizza all'interno di un'espressione.
164+
- L'operatore `??` ha una precedenza molto bassa, solo un po' più alta di `?` e `=`, quindi va considerata l'aggiunta di parentesi quando lo si utilizza all'interno di un'espressione.
166165
- È proibito usarlo con `||` o `&&` senza l'utilizzo di parentesi esplicite.

0 commit comments

Comments
 (0)