La struttura switch-case in Java

Nel linguaggio Java la struttura switch-case ti permette di gestire le decisioni multiple in un programma. E' molto utile quando hai una variabile e vuoi eseguire azioni diverse in base al suo valore.

A cosa serve? Immagina di dover prendere una decisione in base al giorno della settimana. Potresti usare tanti if-else consecutivi, ma Java ci offre qualcosa di più chiaro: il costrutto switch. Il costrutto switch è sicuramente molto più leggibile rispetto a tanti if-else annidati e rende il codice chiaro quando hai molte alternative da gestire.

Ecco come funziona: tu passi al costrutto una variabile, e questo "sceglie" quale blocco di codice eseguire in base al valore di quella variabile.

switch (variabile) {
    case valore1:
        // Codice da eseguire se la variabile ha valore1
        break;
    case valore2:
        // Codice da eseguire se la variabile ha valore2
        break;
    default:
        // Codice da eseguire se nessun valore corrisponde
}

Nell'istruzione switch(variabile) inserisci tra le parentesi tonde la variabile che vuoi confrontare. Può essere un numero, una stringa o un'enumerazione.

Ogni clausola case rappresenta un possibile valore della variabile.

Se il valore corrisponde, il codice sotto viene eseguito.

E' molto importante inserire l'istruzione break alla fine di ogni blocco case. Dice a Java di "uscire" dal blocco switch una volta eseguito il codice. Se non metti il break, Java continua a eseguire i case successivi anche se non corrispondono, un comportamento noto come fall-through.

L'ultimo blocco default: viene eseguito se nessuno dei case corrisponde al valore della variabile.

La clausola default nello switch case è facoltativa. Tuttavia, è buona pratica includerla per gestire eventuali valori imprevisti o non corrispondenti ai case definiti. In questo modo si evitano comportamenti inattesi o lasciati senza gestione nel programma.

Un esempio pratico

Immagina di voler stampare il giorno della settimana a partire da un numero intero (1 per lunedì, 2 per martedì, ecc.).

int giorno = 3;

switch (giorno) {
    case 1:
        System.out.println("Lunedì");
        break;
    case 2:
        System.out.println("Martedì");
        break;
    case 3:
        System.out.println("Mercoledì");
        break;
    case 4:
        System.out.println("Giovedì");
        break;
    case 5:
        System.out.println("Venerdì");
        break;
    case 6:
        System.out.println("Sabato");
        break;
    case 7:
        System.out.println("Domenica");
        break;
    default:
        System.out.println("Numero non valido");
}

In questo esempio, la variabile `giorno` vale 3, quindi il blocco corrispondente al case 3 verrà eseguito, stampando "Mercoledì".

Mercoledì

Se la variabile avesse un valore fuori dal range 1-7, verrebbe eseguito il blocco default, stampando "Numero non valido".

Quando usare la struttura switch?

Lo switch è utile quando hai molte alternative basate sullo stesso tipo di valore.

Se hai solo due o tre condizioni, un semplice if-else potrebbe essere più leggibile.

Ma con più condizioni, come nei giorni della settimana, lo switch mantiene il codice più pulito e facile da seguire.

Switch con le stringhe

Java ti permette anche di usare le stringhe all'interno di uno switch, il che è molto comodo.

Ecco un esempio con i nomi dei giorni della settimana.

String giorno = "Lunedì";

switch (giorno) {
    case "Lunedì":
        System.out.println("Inizio settimana!");
        break;
    case "Venerdì":
        System.out.println("Quasi weekend!");
        break;
    case "Domenica":
        System.out.println("Rilassati, è domenica.");
        break;
    default:
        System.out.println("Giorno sconosciuto");
}

In questo caso la variabile `giorno` è una stringa, e il programma stampa "Inizio settimana!" perché corrisponde al case "Lunedì".

Inizio settimana!

Attenzione a non dimenticare l'istruzione break, altrimenti il codice eseguirà tutti i case successivi fino alla fine.

Fall-through

Il fall-through è il comportamento dello switch in cui, se non si usa il comando break, il programma continua a eseguire i blocchi di codice dei casi successivi anche se non corrispondono al valore della variabile.

In generale viene eliminato per evitare le esecuzioni indesiderate ma a volte può essere utile.

Ad esempio, il fall-through ti consente di raggruppare più case insieme.

int mese = 6;
switch (mese) {
    case 1: case 2: case 3:
        System.out.println("È inverno");
        break;
    case 4: case 5: case 6:
        System.out.println("È primavera");
        break;
    case 7: case 8: case 9:
        System.out.println("È estate");
        break;
    case 10: case 11: case 12:
        System.out.println("È autunno");
        break;
    default:
        System.out.println("Mese non valido");
}

In questo esempio, la variabile 'mese' è 6, quindi viene eseguito il codice del case 4, 5, 6 stampando sullo schermo "È primavera".

È primavera

In questo caso il fall-through è voluto: raggruppando più "case", possiamo gestire più valori con una singola istruzione.

witch Expressions (Java 12+)

A partire da Java 12, il costrutto switch ha subito un'evoluzione con le switch expressions.

Ad esempio, puoi assegnare direttamente un valore a una variabile senza bisogno del break:

String stagione = switch (mese) {
    case 12, 1, 2 -> "Inverno";
    case 3, 4, 5 -> "Primavera";
    case 6, 7, 8 -> "Estate";
    case 9, 10, 11 -> "Autunno";
    default -> "Mese non valido";
};

System.out.println(stagione);

Questa sintassi rende il codice ancora più compatto e leggibile.

Ricorda che la struttura switch expressions è disponibile solo nelle versioni più recenti di Java!

 
 

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