Ogni programma ha bisogno di reagire. Un utente clicca un pulsante. Un'API restituisce dati. Un campo di un modulo si svuota. Senza un modo per creare dei rami, il tuo codice verrebbe eseguito riga per riga, indipendentemente da ciò che sta accadendo realmente. I condizionali conferiscono a JavaScript la capacità di scegliere. Sono i decisori all'interno delle tue funzioni, i guardiani che decidono cosa viene eseguito e cosa viene saltato. Una volta capito come scriverli bene, smetterai di scrivere script rigidi e inizierai a costruire software che risponde davvero.

Perché i condizionali sono importanti

Il flusso di controllo è la spina dorsale della logica. Usi i condizionali per convalidare le password prima di inviarle a un server. Controlli se un carrello della spesa è vuoto prima di calcolare le tasse. Rilevi se una richiesta di rete è fallita per poter mostrare un errore invece di una schermata vuota. Tutti questi scenari si basano sulla stessa semplice idea: valuta qualcosa, poi agisci di conseguenza.

Senza i condizionali, la tua applicazione sarebbe un monologo piuttosto che una conversazione. Non potrebbe gestire diversi scenari di dati, gestire gli errori con eleganza o reagire alle azioni dell'utente in modo significativo. Ti permettono di controllare come il tuo programma si comporta in condizioni di incertezza del mondo reale.

L'istruzione if di base

Il punto di partenza più semplice è l'istruzione if autonoma. Dice: se questa cosa è vera, esegui questo lavoro. Tutto qui. Nessun fallback, nessun percorso alternativo.

if (x % 2 === 0) {
    console.log("Even");
}

In questo snippet, l'operatore modulo controlla se x è divisibile per due senza resto. Quando il resto è zero, la console stampa la stringa. Se x è dispari, non succede nulla. Il blocco viene ignorato e l'esecuzione continua sotto.

Quell'ignorare silenzioso è importante. A volte vuoi proteggere solo una singola azione. Forse vuoi aggiungere una classe CSS a un pulsante solo quando è attivo, o aggiungere un elemento a un array solo quando l'input non è vuoto. Un semplice if gestisce questi momenti senza costringerti a scrivere logica non necessaria.

Aggiungere un'alternativa con if-else

Le decisioni reali hanno solitamente due lati. O l'utente ha l'età sufficiente, o non l'ha. O il pagamento è andato a buon fine, o è fallito. La struttura if-else copre entrambi i casi.

if (age >= 18) {
    console.log("Adult");
} else {
    console.log("Not an Adult");
}

Il blocco else intercetta tutto ciò che la prima condizione ha rifiutato. Crea un ramo binario pulito. Questo pattern funziona bene per toggle, permessi e feature flag. Mantieni la logica all'interno di ogni blocco focalizzata. Se ti ritrovi ad accumulare troppi compiti in un unico ramo, di solito è un segnale che dovresti suddividere il lavoro in funzioni più piccole.

Controllare percorsi multipli con else if

La vita raramente offre solo due scelte. Potresti aver bisogno di categorizzare un numero come positivo, negativo o zero. Potresti assegnare una tariffa di spedizione in base alle fasce di peso. Per confronti multipli ordinati, usa else if.

if (x > 0) {
    console.log("Positive");
} else if (x < 0) {
    console.log("Negative");
} else {
    console.log("Zero");
}

JavaScript li valuta dall'alto verso il basso. Non appena una condizione viene soddisfatta, esegue quel blocco e ignora il resto. L'ordine è importante. Se controllassi x > 0 dopo aver controllato x > 100, il controllo più restrittivo non verrebbe mai eseguito perché quello più permissivo lo intercetterebbe prima. Pensa a else if come a una lista di priorità.

L'istruzione switch

Quando confronti un valore con molte opzioni discrete, una lunga catena di istruzioni else if può risultare ripetitiva. Un'istruzione switch pulisce tutto questo. Corrisponde un'espressione a diverse clausole case ed esegue il blocco corrispondente.

switch (true) {
    case marks >= 90:
        Branch = "Computer science";
        break;
    case marks >= 80:
        Branch = "Mechanical";
        break;
    default:
        Branch = "Other";
}

Questo esempio utilizza switch(true) per valutare direttamente le condizioni booleane, un pattern JavaScript comune quando la logica si basa su intervalli piuttosto che su un'uguaglianza esatta. La parola chiave break è essenziale. Senza di essa, l'esecuzione passa al caso successivo indipendentemente dalla corrispondenza, il che raramente è ciò che si desidera. La clausola default agisce come un else finale, intercettando tutto ciò che non rientra nei casi precedenti.

Lo switch brilla quando hai opzioni chiare e fisse. Spesso è più facile da scansionare rispetto a una lunga pila di blocchi else if, specialmente quando ogni ramo si limita ad assegnare un valore o a chiamare una singola funzione.

L'operatore ternario

Per decisioni binarie brevi, l'operatore ternario mantiene le cose compatte. Prende tre operandi: una condizione, un valore se vera e un valore se falsa.

const result = (age >= 18) ? "Eligible" : "Not eligible";

Puoi usarlo per assegnazioni rapide o ritorni inline. Funziona bene quando il risultato è un'espressione semplice. Resisti alla tentazione di annidare gli operatori ternari per tre livelli. Un ternario annidato potrebbe risparmiare righe, ma a scapito della leggibilità. Quando la logica cresce, un blocco if-else è solitamente più gentile con il prossimo sviluppatore che aprirà il file.

Decisioni annidate

La logica complessa a volte richiede di porre domande di approfondimento. È possibile annidare un if all'interno di un altro if per affinare una decisione.

if (weather === "sunny") {
    if (temp > 30) {
        console.log("