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/02-first-steps/11-logical-operators/4-alert-and/solution.md
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ La risposta è: `1`, e poi `undefined`.
4
4
alert( alert(1) &&alert(2) );
5
5
```
6
6
7
-
La chiamata `alert` ritorna `undefined` (mostra solo un messaggio, quindi non ha nessuna valore di ritorno significativo).
7
+
La chiamata `alert` ritorna `undefined` (mostra solo un messaggio, quindi non ha nessuna valore significativo di ritorno).
8
8
9
-
Per questo `&&` valuta l'operando di sinistra (che mostra `1`), e si ferma immediatamente, perchè `undefined` è un valore falso. AND `&&`cerca un valore falso e lo ritorna.
9
+
Per questo `&&`, valutato l'operando di sinistra (che mostra `1`), si ferma: `undefined` è un valore falso e `&&` lo ritorna immediatamente.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/11-logical-operators/9-check-login/task.md
+7-7Lines changed: 7 additions & 7 deletions
Original file line number
Diff line number
Diff line change
@@ -6,20 +6,20 @@ importance: 3
6
6
7
7
Scrivi il codice che richiede un login tramite `prompt`.
8
8
9
-
Se l'utente digita `"Admin"`, allora si richiede una password tramite `prompt`, se l'input è una stringa vuota o `key:Esc` -- mostra "Canceled.", se invece è un'altra stringa -- allora mostra "I don't know you".
9
+
Se l'utente digita `"Admin"`, si richiede una password tramite `prompt`; se l'input è una stringa vuota o `key:Esc` -- mostra "Canceled."; se è diversa da `"Admin"`, mostra "I don't know you".
10
10
11
-
La passoword viene controllata con le seguenti regole:
11
+
La passoword viene controllata secondo i seguenti criteri:
12
12
13
-
- Se è uguale a "TheMaster", allora mostra "Welcome!",
14
-
- Un'altra stringa -- mostra "Wrong password",
15
-
-Per una stringa vuota o `key:Esc`, mostra "Canceled."
13
+
- Se è uguale a "TheMaster", mostra "Welcome!",
14
+
- Un stringa diversa da "TheMaster" -- mostra "Wrong password",
15
+
-Una stringa vuota o `key:Esc` -- mostra "Canceled."
16
16
17
17
Lo schema:
18
18
19
19

20
20
21
-
Utilizzate blocchi `if` annidati. Tenete a mente anche la leggibilità del codice.
21
+
Utilizza blocchi `if` annidati e tieni a mente la leggibilità del codice.
22
22
23
-
Suggerimento: passare un input vuoto tramite prompt ritorna una stringa vuota `''`. Premere `key:ESC`con prompt aperto ritorna `null`.
23
+
Suggerimento: passare un input vuoto tramite prompt ritorna una stringa vuota `''`. Premere `key:ESC`metre il prompt è aperto ritorna `null`.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/11-logical-operators/article.md
+36-45Lines changed: 36 additions & 45 deletions
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,8 @@
1
1
# Operatori logici
2
2
3
-
In JavaScript ci sono tre operatori logici: `||` (OR), `&&` (AND), `!` (NOT).
3
+
In JavaScript ci sono tre operatori logici: `||` (OR), `&&` (AND), e `!` (NOT).
4
4
5
-
Nonostante si chiamino "logici", possono essere applicati a valori di qualsiasi tipo, non solo ai booleani. Il risultato stesso può essere di qualunque tipo.
5
+
Nonostante si chiamino "logici", possono essere applicati a valori di qualsiasi tipo, non solo ai booleani (i risultati stessi possono essere di qualunque tipo).
6
6
7
7
Vediamoli nei dettagli.
8
8
@@ -14,9 +14,9 @@ L'operatore "OR" viene rappresentato da due linee verticali:
14
14
result = a || b;
15
15
```
16
16
17
-
Nella programmazione classica, l'OR logico è pensato per manipolare solo tipi booleani. Se almeno un argomento è `true`, allora il risultato sarà `true`, altrimenti sarà `false`.
17
+
Nella programmazione classica, l'OR logico è utilizzato per manipolare solo tipi booleani. Se almeno un argomento è `true`, allora il risultato sarà `true`, altrimenti sarà `false`.
18
18
19
-
In JavaScript questo operatore è un pò più potente. Ma prima guardiamo come si comporta con valori booleani.
19
+
In JavaScript questo operatore è un po' più potente. Ma prima vediamo come si comporta con i valori booleani.
Questo ci porta ad alcuni utilizzi interessanti rispetto al "puro e classico OR booleano".boolean-only OR".
100
+
Questo ci permette alcuni utilizzi interessanti rispetto al "puro e classico OR booleano"boolean-only OR".
101
101
102
-
1.**Prelevare il primo valore vero da una lista di variabili o espressioni.**
102
+
1.**Trovare il primo valore vero in una lista di variabili o espressioni.**
103
103
104
-
Immaginiamo di avere diverse variabili, `firstName`, `lastName` e `nickName`, tutti opzionali (possono quindi essere undefined o avere valori falsi).
104
+
Immaginiamo di avere diverse variabili, `firstName`, `lastName` e `nickName`, tutte opzionali (possono quindi essere *undefined* o avere valori falsi).
105
105
106
-
Possiamo utilizzare OR `||` per selezionare quello che contiene il valore e mostrarlo (oppure mostrare `"Anonymous"` se nessun valore è settato):
106
+
Possiamo utilizzare OR `||` per selezionare quella che contiene un valore e mostrarlo (oppure mostrare `"Anonymous"` se nessua variabile è definita):
107
107
108
108
```js run
109
109
let firstName ="";
@@ -119,27 +119,17 @@ Questo ci porta ad alcuni utilizzi interessanti rispetto al "puro e classico OR
119
119
120
120
2.**Valutazione a Corto-Circuito.**
121
121
122
-
Gli operandi, oltre che valori, possono essere anche espressioni arbitrarie. ORvaluta ed esegue i test da sinistra a destra. La valutazione si ferma al primo risultato vero, questo viene poi ritornato. Il processo è chiamato "valutazione a corto-circuito", perchè cerca di terminare il prima possibile partendo da sinistra verso destra.
122
+
Gli operandi, oltre che valori, possono essere anche espressioni arbitrarie. L'operatore OR esegue la valutazione da sinistra a destra e si ferma al primo risultato vero, il quale viene ritornato. Il processo è chiamato "valutazione a corto-circuito" perché cerca di concludersi il prima possibile, senza dover elaborare tutti gli operandi.
123
123
124
-
Questo si vede chiaramente quando il secondo argomento causerebbe side-effect. Come l'assegnazione di una variabile.
125
-
126
-
Se proviamo ad eseguire l'esempio che segue, `x` non verrà assegnata:
127
-
128
-
alert(x); // undefined, perché (x = 1) non viene valutato
129
-
```
130
-
131
-
Se invece il primo argomento è `false`, allora `||` prosegue e valuta il secondo, in questo caso l'assegnazione funziona:
124
+
Il logical OR è particolarmente utile quando il secondo argomento causerebbe un *side-effect* come l'assegnazione di una variabile o la chiamata a una funzione.
125
+
Nell'esempio che segue solo il secondo messaggio verrà mostrato.
132
126
133
127
```js run no-beautify
134
128
*!*true*/!* || alert("not printed");
135
129
*!*false*/!* || alert("printed");
136
130
```
137
-
138
-
Un'assegnazione è un caso semplice. Potrebbero essere coinvolti altri tipi di side-effect.
139
-
140
-
Quello che abbiamo visto, è un "modo breve di fare `if`". Il primo operando viene convertito a booleano e solo se è falso viene eseguito il secondo.
141
-
142
-
La maggior parte delle volte è meglio utilizzare un " `if` "regolare", per mantenere il codice leggibile, in alcuni casi però può risultare utile.
131
+
Nella prima linea l'operatore OR trova subito un valore vero e ferma immediatamente la valutazione, quindi *alert* non viene eseguito.
132
+
Si può utilizzare questa funzionalità per eseguire un commando nel caso in cui la prima parte della condizione sia falsa.
143
133
144
134
## && (AND)
145
135
@@ -178,9 +168,9 @@ if (1 && 0) { // valutato come true && false
````smart header="Precedenza di AND`&&` è maggiore dell'OR `||`"
226
216
La precedenza dell'operatore AND`&&` è maggiore di quella dell'OR `||`.
227
217
228
-
Quindi il codice `a && b || c && d`esegue in maniera analoga all'espressione: `(a && b) || (c && d)`.
218
+
Quindi il codice `a && b || c && d` è analogo all'espressione:`(a && b) || (c && d)`.
229
219
````
230
220
231
221
````warn header="Non rimpiazzate `if` con `||` o `&&`"
@@ -242,7 +232,7 @@ let x = 1;
242
232
243
233
Le azioni nella parte destra di `&&` vengono eseguite solamente se la valutazione non si ferma prima. Cioè: solo se `(x > 0)` è vera.
244
234
245
-
Quindi sostanzialmente è analogo a:
235
+
Il codie sopra è sostanzialmente analogo a:
246
236
247
237
```js run
248
238
let x = 1;
@@ -253,6 +243,7 @@ if (x > 0) alert( 'Greater than zero!' );
253
243
La variante con `&&` sembra essere più corta. Ma l'istruzione `if` è più ovvia e tende ad essere più leggibile.
254
244
255
245
Quindi è consigliato usare ogni costrutto solo per i suoi scopi. Usate un `if` se volete imporre una condizione. Utilizzate invece `&&` se volete un AND.
246
+
````
256
247
257
248
## ! (NOT)
258
249
@@ -266,7 +257,7 @@ result = !value;
266
257
267
258
L'operatore accetta un solo argomento e si comporta come segue:
268
259
269
-
1. Converte l'operando al tipo booleano: `true/false`.
Quello che accade è che il primo NOT converte il tipo a booleano e ritorna il suo inverso, il secondo NOT lo inverte nuovamente. Alla fine abbiamo un valore di tipo booleano.
277
+
Quello che accade è che il primo NOT converte l'operando a booleano e ritorna il suo inverso, e il secondo NOT lo *inverte nuovamente*. Il risultato è un valore di tipo booleano.
287
278
288
-
C'è un modo molto più lungo per fare la stessa cosa -- una funzione del linguaggio `Boolean`:
279
+
C'è un modo molto più lungo per fare la stessa cosa, usare la funzione `Boolean`, integrata in JavaScript:
289
280
290
281
```js run
291
282
alert( Boolean("non-empty string") ); // true
292
283
alert( Boolean(null) ); // false
293
284
```
294
285
295
-
La precedenza del NOT `!` è la più alta fra tutti gli operatori logici quindi viene sempre eseguita per prima, precede `&&`, `||`.
286
+
La precedenza del NOT `!` è la più alta fra tutti gli operatori logici; viene sempre eseguita per prima e precede sia `&&` che `||`.
0 commit comments