Java - Switch-Ausdrücke

Hallo da, zukünftige Java-Programmierer! Heute werden wir in eine der spannendsten Funktionen einsteigen, die in Java 12 eingeführt und in Java 14 verbessert wurden: Switch-Ausdrücke. Als euer freundlicher Nachbarlehrer für Informatik bin ich hier, um euch durch diese Reise zu führen, auch wenn ihr noch nie eine einzige Codezeile geschrieben habt. Also schnallt euch an und los geht's!

Java - Switch Expressions

Was sind Switch-Ausdrücke?

Bevor wir zu den Switch-Ausdrücken springen, lassen uns einen kurzen Abstecher machen, um zu verstehen, was ein Switch-Statement ist. Stellt euch vor, ihr seid in einem Eiscafé und abhängig von eurer Geschmackswahl bekommt ihr eine unterschiedliche Topping. Das ist grundsätzlich das, was ein Switch-Statement in der Programmierung macht – es ermöglicht es euch, unterschiedliche Code basierend auf verschiedenen Bedingungen auszuführen.

Nun nehmen Switch-Ausdrücke dieses Konzept und machen es noch mächtiger und prägnanter. Sie ermöglichen es uns, den gesamten Switch-Block als einen Ausdruck zu behandeln, der einen Wert zurückgeben kann. Es ist wie ein Upgrade von einer normalen Eiswaffel zu einem Luxus-Sundae!

Die alte Methode: Traditionelle Switch-Statements

Lassen uns mit einem traditionellen Switch-Statement beginnen, um zu sehen, wie wir das früher gemacht haben:

String day = "MONDAY";
String typeOfDay;

switch (day) {
case "MONDAY":
case "TUESDAY":
case "WEDNESDAY":
case "THURSDAY":
case "FRIDAY":
typeOfDay = "Weekday";
break;
case "SATURDAY":
case "SUNDAY":
typeOfDay = "Weekend";
break;
default:
typeOfDay = "Invalid day";
}

System.out.println(typeOfDay);

In diesem Beispiel bestimmen wir, ob ein Tag ein Werktag oder ein Wochenende ist. Beachtet, wie wir break-Anweisungen verwenden müssen, um einen Fall-Through zu verhindern, und wie wir typeOfDay außerhalb des Switch-Blocks deklarieren müssen.

Die neue Methode: Switch-Ausdrücke

Nun sehen wir, wie wir das gleiche Ergebnis mit Switch-Ausdrücken erreichen können:

String day = "MONDAY";
String typeOfDay = switch (day) {
case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "Weekday";
case "SATURDAY", "SUNDAY" -> "Weekend";
default -> "Invalid day";
};

System.out.println(typeOfDay);

Wow! Schaut euch an, wie viel sauberer und prägnanter das ist. Wir haben mehrere Fälle kombiniert, break-Anweisungen entfernt und das Ergebnis direkt typeOfDay zugewiesen. Es ist wie das Aufräumen eures Zimmers – plötzlich ist alles sauber und ordentlich!

Switch-Ausdruck mit "case L ->" Labels

Die Pfeil-Syntax (->) ist ein Schlüsselmerkmal von Switch-Ausdrücken. Sie ermöglicht es uns, eine prägnante Möglichkeit zu bieten, sowohl die Fall-Beschriftung als auch die zugehörige Aktion festzulegen. Lassen uns ein weiteres Beispiel anschauen:

int dayNumber = 3;
String dayName = switch (dayNumber) {
case 1 -> "Montag";
case 2 -> "Dienstag";
case 3 -> "Mittwoch";
case 4 -> "Donnerstag";
case 5 -> "Freitag";
case 6 -> "Samstag";
case 7 -> "Sonntag";
default -> "Ungültige Tagnummer";
};

System.out.println("Tag " + dayNumber + " ist " + dayName);

In diesem Beispiel konvertieren wir eine Tagnummer in den zugehörigen Namen. Die Pfeil-Syntax macht jeden Fall eine einzelne, leicht zu lesende Zeile. Es ist wie ein Schild, das direkt auf die richtige Antwort zeigt!

Switch-Ausdruck mit "case L:" Anweisungen und der yield-Anweisung

Manchmal könnt ihr vielleicht mehr als nur einen einfachen Wert in eurem Switch-Ausdruck zurückgeben müssen. Hier kommt die yield-Anweisung ins Spiel. Es ist, als würde man sagen: "Ich bin mit meinen Berechnungen fertig, hier ist die endgültige Antwort!"

Lassen uns ein Beispiel anschauen:

int month = 8;
String season = switch (month) {
case 12, 1, 2:
yield "Winter";
case 3, 4, 5:
yield "Frühling";
case 6, 7, 8:
yield "Sommer";
case 9, 10, 11:
yield "Herbst";
default: {
String message = "Ungültiger Monat: " + month;
System.out.println(message);
yield "Unbekannt";
}
};

System.out.println("Die Jahreszeit für Monat " + month + " ist " + season);

In diesem Beispiel bestimmen wir die Jahreszeit basierend auf dem Monat. Beachtet, wie wir yield verwenden, um Werte zurückzugeben, besonders im default-Fall, bei dem wir ein bisschen mehr Verarbeitung durchführen.

Fortgeschrittene Verwendung: Ausdrücke in Fall-Beschriftungen

Eine der coolsten Funktionen von Switch-Ausdrücken ist, dass ihr Ausdrücke in Fall-Beschriftungen verwenden könnt. Es ist, als würde man seinem Switch-Statement eine Superkraft verleihen! Hier ist ein Beispiel:

record Person(String name, int age) {}

Person person = new Person("Alice", 25);

String lifeStage = switch (person) {
case Person p when p.age() < 13 -> "Kind";
case Person p when p.age() >= 13 && p.age() < 20 -> "Teenager";
case Person p when p.age() >= 20 && p.age() < 60 -> "Erwachsener";
case Person p when p.age() >= 60 -> "Senior";
default -> "Unbekannt";
};

System.out.println(person.name() + " ist ein " + lifeStage);

In diesem Beispiel verwenden wir ein record (eine weitere coole Java-Funktion) zur Darstellung einer Person und dann Switch-Ausdrücke mit komplexen Bedingungen, um ihren Lebensabschnitt zu bestimmen. Es ist, als hätte ihr einen persönlichen Lebensberater in eurem Code!

Fazit

Switch-Ausdrücke sind ein leistungsstarkes Werkzeug in Java, das euren Code lesbarer, prägnanter und weniger fehleranfällig machen kann. Es ist wie ein Upgrade von einem Flip-Phone zu einem Smartphone – plötzlich könnt ihr mit weniger Aufwand so viel mehr tun!

Denkt daran, Programmierung ist alles eine Frage der Übung. Also seid nicht ängstlich, diese Konzepte auszuprobieren. Erstellt eure eigenen Switch-Ausdrücke, probiert verschiedene Szenarien aus und das Wichtigste ist: Hättet Spaß dabei!

Wenn wir hier zusammenfassen, hier ist eine Tabelle, die die wichtigsten Methoden zusammenfasst, die wir besprochen haben:

Methode Beschreibung
-> Pfeil-Syntax für prägnante Fall-Beschriftungen und Aktionen
yield Anweisung, um einen Wert aus einem Switch-Ausdruck zurückzugeben
case L when condition Musterabgleich in Fall-Beschriftungen

Happy coding und möge dein Switch immer klar ausdrücken!

Credits: Image by storyset