JS: Condizioni e cicli
L’istruzione if / else
let eta = 17;
if (eta >= 18) {
console.log("Maggiorenne");
} else {
console.log("Minorenne");
}
Stessa logica di Python, con due differenze di sintassi:
- la condizione va tra parentesi
( ) - il blocco va tra graffe
{ }(niente:e niente indentazione obbligatoria — anche se restare indentati resta buona pratica)
Per più condizioni in sequenza, else if (equivalente all’elif di Python):
let voto = 7;
if (voto >= 9) {
console.log("Ottimo");
} else if (voto >= 6) {
console.log("Sufficiente");
} else {
console.log("Insufficiente");
}
Condizioni composte
let eta = 20;
let haPatente = true;
if (eta >= 18 && haPatente) {
console.log("Può guidare");
}
if (eta < 18 || !haPatente) {
console.log("Non può guidare");
}
Valori “falsy” e “truthy”
Una particolarità di JS da conoscere: dentro un if, alcuni valori si comportano come false anche se non lo sono esplicitamente:
if (0) { } // falsy
if ("") { } // falsy (stringa vuota)
if (null) { } // falsy
if (undefined) { } // falsy
if (1) { } // truthy
if ("ciao") { } // truthy (stringa non vuota)
if ([]) { } // truthy — attenzione: un array vuoto è truthy! (diverso da Python)
Warning
In Python,
if []:èFalse(una lista vuota è “falsa”). In JS,if ([]) {}è invece vero: un array, anche vuoto, è sempretruthy.È una delle poche trappole reali per chi passa da Python a JS — tenetela a mente.
Il ciclo for
for (let i = 0; i < 5; i++) {
console.log(i); // stampa 0, 1, 2, 3, 4
}
Le tre parti tra parentesi, separate da ;:
let i = 0— inizializzazione, eseguita una sola volta all’inizioi < 5— condizione, controllata prima di ogni giro: se falsa, il ciclo si fermai++— incremento, eseguito alla fine di ogni giro (i++equivale ai = i + 1)
Non esiste un
range()diretto come in Python: il ciclofor“classico” di JS descrive esplicitamente le tre parti che in Python sono nascoste dentrorange(5). È più verboso, ma anche più flessibile (potete far crescereidi 2 in 2, farlo scendere, ecc. semplicemente cambiando la terza parte).
Il ciclo for…of
Per scorrere gli elementi di un array c’è una forma più diretta, equivalente al for elemento in lista di Python:
const frutti = ["mela", "pera", "banana"];
for (const frutto of frutti) {
console.log(frutto);
}
Il ciclo while
let tentativi = 0;
while (tentativi < 3) {
console.log(`Tentativo numero ${tentativi}`);
tentativi++;
}
Identico a Python nella logica: si ripete finché la condizione resta vera.
Warning
Attenzione a non dimenticare
tentativi++(o un equivalente incremento) dentro il ciclo: senza, la condizione resta vera per sempre e si crea un ciclo infinito
Esercizi
Esercizio w311
Scrivi un if / else che, data una variabile numero, stampi "Positivo", "Negativo" o "Zero" a seconda del suo valore.
Esercizio w312
Usando un ciclo for classico, stampa in console i numeri da 1 a 10.
Esercizio w313
Crea un array di 5 nomi a tua scelta. Usando for...of, stampa per ognuno il messaggio "Ciao, [nome]!".
Esercizio w314
Nel seguente codice il ciclo non si ferma mai (manca l’incremento della variabile). Correggi il problema:
let contatore = 0;
while (contatore < 5) {
console.log(contatore);
}