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/10-ifelse/article.md
+30-31Lines changed: 30 additions & 31 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,11 +2,11 @@
2
2
3
3
Qualche volta abbiamo bisogno di eseguire certe azioni solo nel caso valgano determinate condizioni.
4
4
5
-
Per questo c'è l'istruzione `if` e anche l'operatore condizionale di valutazione a cui noi ci riferiremocon l'operatore "punto di domanda" `?` per semplicità.
5
+
Per questo c'è l'istruzione `if` e l'operatore condizionale di valutazione a cui ci riferiremo, per semplicità, con "l'operatore punto di domanda" `?`.
6
6
7
7
## L'istruzione "if"
8
8
9
-
L'istruzione `if(...)`richiede una condizione, la valuta, e se il risultato è `true`, esegue il codice.
9
+
L'istruzione `if(...)`valuta una condizione (racchiusa nelle parentesi); se il risultato è `true`, esegue il codice che segue `if`.
10
10
11
11
Ad esempio:
12
12
@@ -20,7 +20,7 @@ if (year == 2015) alert( 'You are right!' );
20
20
21
21
Nell'esempio sopra, la condizione è un semplice controllo di uguaglianza: `year == 2015`, ma potrebbe essere qualcosa di molto più complesso.
22
22
23
-
Se dobbiamo eseguire più di un'istruzione, queste vanno raggruppate tramite le parentesi graffe:
23
+
Se dobbiamo eseguire più di un'istruzione, queste vanno raggruppate tramite parentesi graffe:
24
24
25
25
```js
26
26
if (year ==2015) {
@@ -29,34 +29,34 @@ if (year == 2015) {
29
29
}
30
30
```
31
31
32
-
E' consigliabile raggruppare sempre il codice all'interno delle parentesi graffe `{}` quando si usa un `if`, anche se contiene una sola istruzione. La leggibilità viene migliorata.
32
+
E' consigliabile raggruppare sempre il codice all'interno delle parentesi graffe `{}`, quando si usa un `if`, anche se contiene una sola istruzione. La leggibilità ne guadagna.
33
33
34
34
## Conversione booleana
35
35
36
-
L'istruzione `if (…)` valuta la condizione tra le parentesi e la converte al tipo booleano.
36
+
L'istruzione `if (…)` valuta la condizione tra le parentesi e converte il risultato al tipo booleano.
37
37
38
38
Ricordiamo le regole di conversione viste nel capitolo <info:type-conversions>:
39
39
40
40
- Il numero `0`, una stringa vuota `""`, `null`, `undefined` e `NaN` diventano `false`. Per questo vengono chiamati valori "falsi".
41
41
- Gli altri valori diventano `true`, quindi vengono chiamati "veri".
42
42
43
-
Quindi, il codice nell'esempio qui sotto, non verrà mai eseguito:
43
+
Quindi, il codice nell'esempio sotto, non verrà mai eseguito:
44
44
45
45
```js
46
46
if (0) { // 0 è falso
47
47
...
48
48
}
49
49
```
50
50
51
-
...Invece nel prossimo esempio -- verrà eseguito sempre:
51
+
...Nel seguente esempio, invece, verrà sempre eseguito:
52
52
53
53
```js
54
54
if (1) { // 1 è vero
55
55
...
56
56
}
57
57
```
58
58
59
-
Possiamo anche passare un valore già valutato in precedenza su un `if`, come qui:
59
+
Possiamo anche passare un valore già valutato in precedenza, come qui:
60
60
61
61
```js
62
62
let cond = (year ==2015); // l'uguaglianza diventa vera o falsa
@@ -99,13 +99,13 @@ if (year < 2015) {
99
99
}
100
100
```
101
101
102
-
Nel codice sopra JavaScript controlla prima `year < 2015`. Se risulta falso allora va alla successiva condizione `year > 2015`, altrimenti mostra il blocco else con l'`alert`.
102
+
Nel codice sopra JavaScript controlla anzitutto la prima condizione, `year < 2015`. Se risulta falsa va alla successiva condizione `year > 2015` ed esegue il codice dentro le parentesi graffe, altrimenti esegue il codice dentro al blocco `else`.
103
103
104
104
Ci possono essere molti blocchi `else if`. L'`else` finale è opzionale.
105
105
106
106
## Operatore condizionale '?'
107
107
108
-
Qualche volta abbiamo bisogno di assegnare un valore ad una variabile in base ad una condizione.
108
+
Qualche volta abbiamo bisogno di assegnare un valore ad una variabile in base ad una certa condizione.
109
109
110
110
Ad esempio:
111
111
@@ -124,45 +124,45 @@ if (age > 18) {
124
124
alert(accessAllowed);
125
125
```
126
126
127
-
Esiste un'operatore "condizionale" o "punto interrogativo" che ci consente di farlo in maniera più breve e semplice.
127
+
Esiste unoperatore "condizionale", o "punto interrogativo", che ci consente di farlo in maniera più breve e semplice.
128
128
129
-
L'operatore viene rappresentato dal punto interrogativo `?`. Il termine formale è "ternario", il che significa che richiede tre operatori. E' l'unico operatore in JavaScript di questo tipo.
129
+
L'operatore viene rappresentato dal punto interrogativo `?`. Il termine formale è "ternario", perché richiede tre operatori. E' l'unico operatore in JavaScript che ne accetta così tanti.
130
130
131
131
La sintassi è:
132
132
```js
133
133
let result = condition ? value1 : value2;
134
134
```
135
135
136
-
La `condition` viene valutata, se risulta viene ritornato il `value1`, altrimenti viene ritornato il --`value2`.
136
+
La `condition` viene valutata; se risulta vera, viene ritornato `value1`, altrimenti viene ritornato `value2`.
137
137
138
138
Ad esempio:
139
139
140
140
```js
141
141
let accessAllowed = (age >18) ?true:false;
142
142
```
143
143
144
-
Tecnicamente, potremmo omettere le parentesi su `age > 18`. L'operatore condizionale ha una precedenza molto bassa. Viene eseguito dopo gli operatori di confronto `>`.
144
+
Tecnicamente, potremmo omettere le parentesi attorno ad `age > 18`. L'operatore condizionale ha una precedenza molto bassa, viene eseguito dopo gli operatori di confronto `>`.
145
145
146
-
Questo esempio porta allo stesso risultato di quello precedente:
146
+
Il risultato dell'esempio sotto è uguale a quello precedente:
147
147
148
148
```js
149
149
// l'operatore di confronto "age > 18" viene eseguito per primo
150
150
// (non c'è bisogno di racchiuderlo tra parentesi)
151
151
let accessAllowed = age >18?true:false;
152
152
```
153
153
154
-
Le parentesi rendono però il codice più leggibile, quindi è consigliabile utilizzarle.
154
+
Ma le parentesi rendono il codice più leggibile, quindi è consigliabile utilizzarle.
155
155
156
156
````smart
157
-
Nell'esempio sopra sarebbe possibile evitare l'operatore ternario, perchè l'operatore di confronto ritorna già di suo `true/false`:
157
+
Nell'esempio sopra sarebbe possibile omettere anche l'operatore ternario, perchè l'operatore di confronto `>` ritorna già di suo `true/false`:
158
158
159
159
```js
160
-
// the same
160
+
// stesso risultato (risulterà in `true` o `false`, a seconda del valore di `age`)
161
161
let accessAllowed = age > 18;
162
162
```
163
163
````
164
164
165
-
## Operatori '?' multipli
165
+
## Multipli operatori '?'
166
166
167
167
Una sequenza di operatori `?` consente di ritornare un valore che dipende da più condizioni.
Potrebbe essere difficile inizialmente capirne la logica. Ma dopo averlo guardato da più vicino ci accorgiamo è una semplice sequenza di condizioni.
181
+
Potrebbe essere difficile, inizialmente, capirne la logica. Ma dopo averlo guardato da più vicino ci accorgeremo che è una semplice sequenza di condizioni.
182
182
183
183
1. Il primo operatore "?" controlla `age < 3`.
184
-
2. Se è vero -- ritorna `'Hi, baby!'`, altrimenti -- segue la colonna `":"` e controlla `age < 18`.
185
-
3. Se questo è vero -- ritorna `'Hello!'`, altrimenti -- segue la colonna `":"` e controlla `age < 100`.
186
-
4. Se questo è vero -- ritorna `'Greetings!'`, altrimenti -- segue la colonna `":"` e ritorna `'What an unusual age!'`.
184
+
2. Se è vero -- ritorna `'Hi, baby!'`, altrimenti -- segue la colonna `":"`, controlla `age < 18`.
185
+
3. Se questo è vero -- ritorna `'Hello!'`, altrimenti -- segue la colonna `":"`, controlla `age < 100`.
186
+
4. Se questo è vero -- ritorna `'Greetings!'`, altrimenti -- segue la colonna `":"`, ritorna `'What an unusual age!'`.
187
187
188
-
La stessa logica viene usata con`if..else`:
188
+
La stessa logica riscritta utilizzando`if..else`:
189
189
190
190
```js
191
191
if (age <3) {
@@ -212,16 +212,15 @@ let company = prompt('Which company created JavaScript?', '');
212
212
*/!*
213
213
```
214
214
215
-
In base al risultato della condizione `company == 'Netscape'`, viene eseguita la prima o la seconda parte, e mostra il giusto alert.
215
+
In base alla valutazione della condizione `company == 'Netscape'`, viene eseguita la prima o la seconda parte (e il rispettivo `alert`).
216
216
217
-
Qui non assegnamo il risultato ad una variabile. L'idea è di eseguire codice differente in base alla condizione.
217
+
Qui non assegniamo il risultato ad una variabile. L'idea è di eseguire un codice differente a seconda della condizione.
218
218
219
219
**Non è consigliabile utilizzare l'operatore ternario in questo modo.**
220
220
221
-
La notazione risulta essere molto più breve rispetto all'istruzione `if`, questo viene sfruttato da molti programmatori. Ma risulta meno leggibile.
222
-
223
-
Lo stesso codice realizzato con un istruzione `if`:
221
+
La notazione risulta essere molto più breve rispetto all'istruzione `if`; questo viene sfruttato da molti programmatori, ma risulta meno leggibile.
224
222
223
+
Compariamo il codice sopra con una versione che utilizza `if` invece dell'operatore ternario `?`:
225
224
```js run no-beautify
226
225
let company =prompt('Which company created JavaScript?', '');
227
226
@@ -234,6 +233,6 @@ if (company == 'Netscape') {
234
233
*/!*
235
234
```
236
235
237
-
I nostri occhi scannerizzano il codice verticalmente. Quindi i costrutti che si estendono per qualche riga risultano più semplici da capire piuttosto di un'unica istruzione che si estende orrizontalmente.
236
+
I nostri occhi esaminano il codice verticalmente. I costrutti che si estendono per qualche riga risultano più semplici da capire piuttosto di un'unica istruzione che si estende orrizontalmente.
238
237
239
-
L'idea dell'operatore ternario `?` è di ritornare un valore piuttosto che un altro, in base al valore di una condizione. Va quindi utilizzato solo per questo tipo di situazioni. Invece per eseguire diversi codice è consigliabile utilizzare il costrutto `if`.
238
+
L'idea dell'operatore ternario `?` è di ritornare, in base a una condizione, un valore piuttosto di un altro. Va quindi utilizzato solo in questo tipo di situazioni. Per eseguire diversi codici è consigliabile utilizzare il costrutto `if`.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/13-while-for/2-which-value-while/solution.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,9 +9,9 @@ L'esercizio dimostrava come le forme prefissa/postfissa possono portare a risult
9
9
10
10
Il primo valore è `i = 1`, perchè `++i` incrementa prima `i` e poi ritorna il nuovo valore. Quindi il primo confronto è `1 < 5` e `alert` mostra `1`.
11
11
12
-
Poi seguono `2, 3, 4…`-- i valori vengono mostrati uno dopo l'altro. Il confroto utilizza sempre il valose incrementato, perchè `++` è posto prima della variabile.
12
+
Poi seguono `2, 3, 4…`-- i valori vengono mostrati uno dopo l'altro. Il confronto utilizza sempre il valore incrementato, perchè `++` è posto prima della variabile.
13
13
14
-
Ultima iterazione, `i = 4` viene incrementato a `5`, il confronto `while(5 < 5)` fallisce, e il ciclo termina. Quindi `5` non viene mostrato.
14
+
Ultima iterazione, `i = 4` viene incrementato a `5`, il confronto `while(5 < 5)` risulta `false`, e il ciclo termina. `5` non viene mostrato.
15
15
16
16
2. **Da 1 a 5**
17
17
@@ -22,10 +22,10 @@ L'esercizio dimostrava come le forme prefissa/postfissa possono portare a risult
22
22
23
23
Il primo valore è ancora `i = 1`. La forma postfissa `i++` incrementa `i` e ritorna il *vecchio* valore, quindi il confronto `i++ < 5` utilizza `i = 0` (a differenza di `++i < 5`).
24
24
25
-
La chiamata ad `alert` è separata. E' un istruzione che viene eseguita dopo l'incremento e il confronto. Quindi avra il valore `i = 1`.
25
+
La chiamata ad `alert` è separata. E' un istruzione che viene eseguita dopo l'incremento di `i` e il controllo della condizione. Quindi `i = 1`.
26
26
27
27
Seguono `2, 3, 4…`
28
28
29
-
Fermiamoci a `i = 4`. La forma prefissa `++i` incrementerebbe ed utilizzerebbe `5` nel confronto. Qui però stiamo usando la forma postfissa `i++`. Quindi incrementa `i`a `5`, ma ritorna il vecchio valore. Il confronto è `while(4 < 5)` -- vero, il controllo passa alla chiamata `alert`.
29
+
Fermiamoci a `i = 4`. La forma prefissa `++i` incrementerebbe ed utilizzerebbe `5` nel controllo della condizione `i < 5`. Qui però stiamo usando la forma postfissa `i++`. Quindi incrementa `i`a `5`, ma ritorna il vecchio valore. Il confronto è dunque `while(4 < 5)` -- vero; il controllo passa alla chiamata `alert`.
30
30
31
-
Il valore `i = 5` è l'ultimo, perchè nello step successivo avremmo `while(5 < 5)`che è falso.
31
+
Il valore `i = 5` è l'ultimo, perchè nell'iterazione successiva avremmo `while(5 < 5)` e la condizione sarebbe falsa.
0 commit comments