Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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, è sempre truthy.

È 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 ;:

  1. let i = 0 — inizializzazione, eseguita una sola volta all’inizio
  2. i < 5 — condizione, controllata prima di ogni giro: se falsa, il ciclo si ferma
  3. i++ — incremento, eseguito alla fine di ogni giro (i++ equivale a i = i + 1)

Non esiste un range() diretto come in Python: il ciclo for “classico” di JS descrive esplicitamente le tre parti che in Python sono nascoste dentro range(5). È più verboso, ma anche più flessibile (potete far crescere i di 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:

da_correggere.js
let contatore = 0;

while (contatore < 5) {
    console.log(contatore);
}