Java - Espressioni di Switch

Ciao a tutti, futuri programmatori Java! Oggi esploreremo una delle funzionalità più entusiasmanti introdotti in Java 12 e migliorati in Java 14: le Espressioni di Switch. Come insegnante di informatica amichevole della vostra zona, sono qui per guidarvi in questo viaggio, anche se non avete mai scritto una sola riga di codice prima. Allora, allacciate le cinture e iniziamo!

Java - Switch Expressions

Cos'sono le Espressioni di Switch?

Prima di immergerci nelle espressioni di switch, fate un piccolo deviato per capire cos'è uno statement di switch. Immagina di essere in un gelateria e, a seconda del gusto scelto, ottieni una guarnizione diversa. Questo è essenzialmente quello che fa uno statement di switch nella programmazione – permette di eseguire codice diverso in base a condizioni diverse.

Ora, le espressioni di switch prendono questo concetto e lo rendono ancora più potente e conciso. Consentono di trattare l'intero blocco di switch come un'espressione che può restituire un valore. È come passare da un cono di gelato normale a un sundae deluxe!

Il Modo Classico: Statement di Switch Tradizionali

Iniziamo con uno statement di switch tradizionale per vedere come facevamo prima:

String giorno = "LUNEDÌ";
String tipoDiGiorno;

switch (giorno) {
case "LUNEDÌ":
case "MARTEDÌ":
case "MERCOLEDÌ":
case "GIOVEDÌ":
case "VENERDÌ":
tipoDiGiorno = "Giorno della settimana";
break;
case "SABATO":
case "DOMENICA":
tipoDiGiorno = "Fine settimana";
break;
default:
tipoDiGiorno = "Giorno non valido";
}

System.out.println(tipoDiGiorno);

In questo esempio, determiniamo se un giorno è un giorno della settimana o un fine settimana. Notate come abbiamo bisogno di usare le istruzioni break per prevenire il fall-through e abbiamo dovuto dichiarare tipoDiGiorno fuori dal blocco di switch.

Il Nuovo Modo: Espressioni di Switch

Ora, vediamo come possiamo ottenere lo stesso risultato utilizzando le espressioni di switch:

String giorno = "LUNEDÌ";
String tipoDiGiorno = switch (giorno) {
case "LUNEDÌ", "MARTEDÌ", "MERCOLEDÌ", "GIOVEDÌ", "VENERDÌ" -> "Giorno della settimana";
case "SABATO", "DOMENICA" -> "Fine settimana";
default -> "Giorno non valido";
};

System.out.println(tipoDiGiorno);

Wow! Guarda quanto è più pulito e conciso questo. Abbiamo combinato più casi, rimosso le istruzioni break e assegnato direttamente il risultato a tipoDiGiorno. È come pulire la tua stanza – improvvisamente tutto è ordinato e in ordine!

Espressioni di Switch Utilizzando Etichette "case L ->"

La sintassi della freccia (->) è una caratteristica chiave delle espressioni di switch. Permette di specificare in modo conciso sia l'etichetta del caso che l'azione associata. Guardiamo un altro esempio:

int numeroGiorno = 3;
String nomeGiorno = switch (numeroGiorno) {
case 1 -> "Lunedì";
case 2 -> "Martedì";
case 3 -> "Mercoledì";
case 4 -> "Giovedì";
case 5 -> "Venerdì";
case 6 -> "Sabato";
case 7 -> "Domenica";
default -> "Numero giorno non valido";
};

System.out.println("Giorno " + numeroGiorno + " è " + nomeGiorno);

In questo esempio, convertiamo un numero di giorno nel suo nome corrispondente. La sintassi della freccia rende ogni caso una singola riga facile da leggere. È come un cartello che punta direttamente alla risposta giusta!

Espressioni di Switch Utilizzando "case L:" e l'Istruzione yield

A volte, potrebbe essere necessario fare di più che solo restituire un valore semplice nella tua espressione di switch. Ecco dove l'istruzione yield diventa utile. È come dire, "Ho finito i miei calcoli, ecco la risposta finale!"

Vediamo un esempio:

int mese = 8;
String stagione = switch (mese) {
case 12, 1, 2:
yield "Inverno";
case 3, 4, 5:
yield "Primavera";
case 6, 7, 8:
yield "Estate";
case 9, 10, 11:
yield "Autunno";
default: {
String messaggio = "Mese non valido: " + mese;
System.out.println(messaggio);
yield "Sconosciuto";
}
};

System.out.println("La stagione per il mese " + mese + " è " + stagione);

In questo esempio, determiniamo la stagione in base al mese. Notate come usiamo yield per restituire valori, specialmente nel caso default dove stiamo facendo un po' più di elaborazione.

Utilizzo Avanzato: Espressioni negli Etichette dei Casi

Una delle funzionalità più interessanti delle espressioni di switch è che è possibile utilizzare espressioni negli etichette dei casi. È come dare al tuo statement di switch un superpotere! Ecco un esempio:

record Persona(String nome, int età) {}

Persona persona = new Persona("Alice", 25);

String stadioVita = switch (persona) {
case Persona p when p.età() < 13 -> "Bambino";
case Persona p when p.età() >= 13 && p.età() < 20 -> "Adolescente";
case Persona p when p.età() >= 20 && p.età() < 60 -> "Adulato";
case Persona p when p.età() >= 60 -> "Anziano";
default -> "Sconosciuto";
};

System.out.println(persona.nome() + " è un " + stadioVita);

In questo esempio, utilizziamo un record (un'altra funzionalità interessante di Java) per rappresentare una persona, e poi usiamo espressioni di switch con condizioni complesse per determinare il loro stadio della vita. È come avere un coach personale della vita nel tuo codice!

Conclusione

Le espressioni di switch sono uno strumento potente in Java che può rendere il tuo codice più leggibile, conciso e meno soggetto a errori. Sono come passare da un telefono a scatti a uno smartphone – improvvisamente, puoi fare molto di più con meno fatica!

Ricorda, la programmazione è tutta una questione di pratica. Quindi, non aver paura di sperimentare con questi concetti. Prova a creare le tue espressioni di switch, gioca con diverse scenari e, soprattutto, divertiti!

Come conclude, ecco una tabella che riassume i metodi chiave che abbiamo discusso:

Metodo Descrizione
-> Sintassi della freccia per etichette di casi e azioni concisi
yield Istruzione per restituire un valore da un'espressione di switch
case L when condizione Corrispondenza di pattern negli etichette dei casi

Buon coding, e che le tue switch esprimano sempre chiaramente!

Credits: Image by storyset