La clausola else if in Java

La clausola `else if` ti permette di gestire condizioni multiple in un programma Java.

Il costrutto base per prendere una decisione in Java è l'istruzione `if`. Ma cosa succede se vuoi valutare più condizioni una dopo l'altra, fino a quando una di queste risulta vera? È qui che entra in gioco la clausola `else if`.

Il costrutto `else if` è una combinazione di un'istruzione `if` e un'istruzione `else`.

Ecco come appare in Java:

if (condizione1) {
    // codice da eseguire se condizione1 è vera
} else if (condizione2) {
    // codice da eseguire se condizione1 è falsa ma condizione2 è vera
} else if (condizione3) {
    // codice da eseguire se condizione1 e condizione2 sono false, ma condizione3 è vera
} else {
    // codice da eseguire se nessuna delle condizioni è vera
}

Equivale a dire al programma: "Se questa condizione non è vera, allora prova a vedere se quest'altra lo è".

Quindi, l'idea è quella di avere più condizioni che vengono controllate in sequenza.

Se una delle condizioni è vera, il codice all'interno di quel blocco viene eseguito, e le altre condizioni vengono ignorate.

Qual è la differenza tra else e else if?

Le clausole `else` e `else if` possono sembrare simili ma svolgono funzioni diverse:

  • La clausola `else if` viene utilizzata per verificare un'ulteriore condizione quando la prima `if` è falsa. Può essere seguito da altre condizioni 'else if' da valutare. Il programma cessa automaticamente di verificare le condizioni successive quando trova una clausola 'else if' vera. A differenza del costrutto switch-case, non c'è bisogno di aggiungere un'istruzione break.
  • La clausola `else` viene eseguita alla fine solo se tutte le condizioni precedenti (`if` e `else if`) sono false. Non controlla alcuna condizione, ma agisce come un "fallback".

In breve, `else if` aggiunge un controllo condizionale extra, mentre `else` viene eseguita quando nessuna condizione precedente è vera.

Un esempio pratico

Facciamo un esempio pratico per chiarire meglio.

Supponiamo che tu voglia scrivere un programma che assegni una lettera a un voto numerico (come "A", "B", "C", ecc.) in base alla seguente scala:

  • Se il voto è 90 o superiore, assegni una "A".
  • Se il voto è tra 80 e 89, assegni una "B".
  • Se il voto è tra 70 e 79, assegni una "C".
  • Se il voto è tra 60 e 69, assegni una "D".
  • Altrimenti, assegni una "F".

Vediamo come puoi implementare questo con `else if`:

public class Voto {
    public static void main(String[] args) {
        int voto = 85;  // esempio di voto

        if (voto >= 90) {
            System.out.println("Il voto è A");
        } else if (voto >= 80) {
            System.out.println("Il voto è B");
        } else if (voto >= 70) {
            System.out.println("Il voto è C");
        } else if (voto >= 60) {
            System.out.println("Il voto è D");
        } else {
            System.out.println("Il voto è F");
        }
    }
}

Vediamo come funziona il codice passo dopo passo.

  1. Il programma controlla la prima condizione: `voto >= 90`.
  2. Se è vera (ad esempio, se `voto` fosse 92), allora il programma stamperebbe `"Il voto è A"`, e poi ignorerebbe tutte le altre condizioni.
  3. Se la prima condizione è falsa, passa alla successiva: `voto >= 80`. Se questa è vera, il programma stampa `"Il voto è B"` e salta le altre condizioni.
  4. Se la seconda condizione è falsa continua a verificare altre condizioni con gli altri `else if`, finché non ne trova una vera o, se nessuna è vera, esegue il blocco finale `else`.

In questo caso la variabile `voto = 85` soddisfa la seconda clausola else `else if`, quindi l'output del programma è:

Il voto è B

Ricorda che il programma cessa di controllare le clausole else-if appena ne trova una vera.

Quindi, dopo aver trovato vera la clausola else if (voto >= 80) il programma non controlla le successive else-if e nemmeno la clausola finale else, uscendo dalla struttura condizionale.

Ti faccio un altro esempio.

Immagina che tu voglia creare un programma per dare consigli in base alla temperatura:

int temperatura = 25;

if (temperatura > 30) {
    System.out.println("Fa caldo, prendi una bibita fresca.");
} else if (temperatura >= 20) {
    System.out.println("Il tempo è perfetto, goditi la giornata.");
} else if (temperatura >= 10) {
    System.out.println("Fa fresco, metti una giacca.");
} else {
    System.out.println("Fa freddo, resta al caldo!");
}

In questo caso la variabile temperatura è 25.

Quindi, la seconda clausola case è soddisfatta e l'output del programma è il seguentE:

Il tempo è perfetto, goditi la giornata.

In generale, la clausola `else if` ti permette di gestire scenari con diverse condizioni, ottimizzando il flusso di controllo e rendendo il codice più leggibile ed efficiente.

Perché usare `else if`?

Senza la clausola `else if`, dovresti scrivere più istruzioni `if` separate, il che non sarebbe altrettanto efficiente.

Quando viene trovata una condizione vera in una serie di `else if`, il programma smette di controllare le altre condizioni, risparmiando tempo.

Se invece scrivessi una serie di `if` separati, ognuno verrebbe controllato indipendentemente, anche se una condizione precedente fosse già risultata vera.

Ecco un esempio meno efficiente senza `else if`:

if (voto >= 90) {
    System.out.println("Il voto è A");
}
if (voto >= 80) {
    System.out.println("Il voto è B");
}
if (voto >= 70) {
    System.out.println("Il voto è C");
}
if (voto >= 60) {
    System.out.println("Il voto è D");
}
if (voto < 60) {
    System.out.println("Il voto è F");
}

In questo caso, anche se il voto fosse 85, il programma continuerebbe a controllare tutte le altre condizioni dopo aver già stampato `"Il voto è B"`, cosa che non ha senso ed è solo uno spreco di tempo e di risorse.

Spero che ora sia più chiaro come funziona e quanto è utile.

 
 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin

Il controllo di flusso in Java

Le strutture condizionali

Le strutture cicliche

Le istruzioni di interruzione