Die Switch-Case-Anweisung ist eine Kontrollstruktur in Java, die es dir ermöglicht, einen Ausdruck auf verschiedene mögliche Werte zu überprüfen und - je nach Wert - unterschiedliche Anweisungen auszuführen. Switch-Cases werden vor allem genutzt, um komplexe Verschachtelungen von if-else-Anweisungen zu vermeiden.
Über die Jahre hinweg haben sie die Switch-Case-Anweisungen immer wieder verbessert und sind heute ein wirklich mächtiges Werkzeug.
Die erste Form der Switch-Case-Anweisung konnte lediglich int-basierte Werte verarbeiten. Jeder case musste mit einem break beenden werden - ansonsten würde immer auch alles weitere ausgeführt werden. Lediglich der default-Case benötigt kein break, da es die letzte Anweisung ist.
Beispiel mit Java 1.0 (1996):
int zahl = 2;
switch (zahl) {
case 1:
System.out.println("Eins");
break;
case 2:
System.out.println("Zwei");
break;
default:
System.out.println("Andere Zahl"):
}
Bis zum Jahre 2004 hat sich daran auch nichts geändert. Dann hat die Switch-Case-Anweisung wieder ein bisschen Aufmerksamkeit erhalten und die Unterstützung für Enums bekommen.
Beispiel mit Java 5 (2004):
enum Wochentag { MONTAG, DIENSTAG, MITTWOCH }
Wochentag tag = Wochentag.MONTAG;
switch (tag) {
case MONTAG:
System.out.println("Wochenstart");
break;
case DIENSTAG:
System.out.println("Zweiter Tag der Woche");
break;
}
In modernen IDEs würde dieser Fall aber eine Fehlermeldung verursachen da festgestellt wird, dass nicht alle Fälle die im Enum definiert wurden in dieser Switch-Case-Anweisung definiert wurden und/oder es keine default-Anweisung gibt.
Die wohl größte Veränderung und der Öffnung für viele weitere Fälle in der Switch-Case-Anweisung wurde in 2011 mit Java 7 eingeführt: Die Unterstützung von Strings.
Beispiel mit Java 7 (2011):
String farbe = "rot";
switch (farbe) {
case "rot":
System-out-println("Farbe ist rot");
break;
case "blau":
System.out.println("Farbe ist blau");
break;
}
Bis hier hin hat sich also lediglich an der Verwendung der Datentypen etwas getan. Im Jahre 2019 kam endlich eine Verbesserung der Schreibweise bei welcher auf das break verzichtet werden kann. Des Weiteren kann man die Switch-Case-Anweisung nun auch direkt einer Variablen zuweisen.
Beispiel mit Java 12 (2019):
int zahl = 2;
String ergebnis = switch (zahl) {
case 1 -> "Eins";
case 2 -> "Zwei";
default -> "Andere Zahl";
}
System-out-println(ergebnis);
Die letzte Änderung an der Switch-Case-Anweisung gab es meines Wissens dann im Jahre 2020 mit Java 14. Hier wurde das Schlüsselwort yield eingeführt, mit dem sich in einem Case mit mehreren Anweisungen Werte zurückgeben lassen.
Beispiel mit Java 14 (2020):
int zahl = 2;
String ergebnis = switch (zahl) {
case 1 -> "Eins";
case 2 -> {
System.out.println("Fall 2");
yield "Zwei";
}
default -> "Andere Zahl";
};
System.out.println(ergebnis);
Die Switch-Case-Anweisung hat sich über die Jahre weiterentwickelt und hat die Verwendung mittlerweile auch sehr verbessert. Diese Kontrollstruktur ist (nun) sehr leicht zu verstehen und zu verwenden und bietet deutliche Vorteile gegenüber einer langen if-else-Verkettung. Ich persönlich habe allerdings noch keine konkreten Anwendungsfall gehabt, in welchem ich auf das yield-Keyword zurückgreifen musste/konnte.
Kanntest du das yield-Keyword und hast du es schon mal verwendet? Erzähl mir gern in den Kommentaren davon!
