Baza Wiedzy

Switch Expressions

Switch Expressions to usprawniona wersja instrukcji sterującej switch. Początkowo mechanizm ten został wprowadzony w Javie 12 jak tzw. preview feature, jednak później w Javie 13 i 14 przedstawiono pewne zmiany i poprawki. Switch Expressions są elementem projektu amber, który przewiduje także wprowadzenie innych zmian do Javy.

Przed Javą 12 instrukcja sterująca switch pozwalała na dokonanie wyboru pomiędzy wieloma wartościami typów całkowitoliczbowych, Stringami lub wartościami enum. Przykładowo:

Przed switch expression🔗

String season = "Winter";
switch (season) {
    case "Spring":
        System.out.println("Mamy aktualnie wiosnę");
        break;
    case "Summer":
        System.out.println("Mamy aktualnie lato");
        break;
    case "Autumn":
        System.out.println("Mamy aktualnie jesień");
        break;
    case "Winter":
        System.out.println("Mamy aktualnie zimę");
        break;
    default:
        System.out.println("Nie znam takiej pory roku");
}

Przykład switch expression🔗

Od Javy 12 możliwości switcha zostały poszerzone. Do tej pory w blokach case można było wykonać obliczenia, czy wywołać metodę. Od Javy 12 poszczególne bloki case mogą zwrócić wynik, który następnie można przypisać np. do zmiennej. Może to wyglądać np. tak:

String season = "Winter";
String translation = switch (season) {
    case "Spring":
        break "wiosna";
    case "Summer":
        break "lato";
    case "Autumn":
        break "jesień";
    case "Winter":
        break "zima";
    default:
        break "nieznany";
};

yield i break🔗

W Javie 12 słowo break używane było teraz albo do zwracania wartości, albo do przerywania wybranego bloku case. Aby rozróżnić te dwie kwestie, od Javy 13 w przypadku zwracania wartości należy wykorzystać słowo yield:

String season = "Winter";
String translation = switch (season) {
    case "Spring":
        yield "wiosna";
    case "Summer":
        yield "lato";
    case "Autumn":
        yield "jesień";
    case "Winter":
        yield "zima";
    default:
        yield "nieznany";
};

Kurs programowania Java

Operator strzałki (->)🔗

Istnieje także możliwość wykorzystania alternatywnego zapisu z operatorem strzałki, podobnym do tego, który wykorzystywany jest w wyrażeniach lambda. Powyższy przykład można przerobić na taki:

String season = "Winter";
String translation = switch (season) {
    case "Spring" -> "wiosna";
    case "Summer" -> "lato";
    case "Autumn" -> "jesień";
    case "Winter" -> "zima";
    default -> "nieznany";
};

Tych dwóch typów zapisów tzn. wykorzystujących słowo yield i operator strzałki nie można ze sobą mieszać, tzn. nie można jednego bloku case zapisywać w jeden, a innego w inny sposób.

Kilka przypadków na raz🔗

W jednym bloku case możesz obsłużyć kilka przypadków na raz:

String season = "Winter";
String temperature = switch (season) {
    case "Spring", "Summer" -> "ciepło";
    case "Autumn", "Winter" -> "zimno";
    default -> "nieznany";
};

W Javie 14 nie wprowadzano już żadnych zmian i switch expressions stały się pełnoprawną częścią języka. Nie wyklucza to jednak tego, że w kolejnych wersjach Javy nie zostaną do switcha wprowadzone dodatkowe usprawnienia - co więcej możemy być tego niemal pewni.

Najlepszy newsletter o Javie w Polsce

Czy chcesz otrzymywać nowości ze świata Javy oraz przykładowe pytania rekrutacyjne? Zapisz się na newsletter i bądź na bieżąco! Otrzymasz także ekskluzywne materiały oraz informacje o nowych kursach i promocjach.

Nikomu nie udostępniamy Twojego maila, a jeśli zechcesz to w każdej chwili możesz się wypisać.

Komentarze do artykułu

Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.