Switch expressions – preview (2)

Wynika z JEP 354.
Wcześniejsze zmiany wprowadzone w Java 12 zostały omówione tutaj.
W Java 13 podstawową zmiana jest dodanie słowa słowa yield.
Jeżeli konstrukcja switch zwraca dane, wówczs można użyć słowa yield. Przykłady przedstawione w pierwszej części zachowują wartość z wyjątkiem przykładów w klasach:
SwitchExpr5.java i SwitchExpr7.java.

Klasy

SwitchExpr5.java
package switchexpr2;

public class SwitchExpr5 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    public static void main(String[] args) {
        Dni dzien = Dni.Nie;
        int dayNum = switch (dzien) {
            case Pon, Czw, Pia, Sob -> dzien.ordinal();
            case Wto -> {
                yield dzien.ordinal();
            }
            case Sro -> {
                yield 2;
            }
            case Nie -> {
                System.out.println("Dziś jest niedziela");
                yield dzien.ordinal();
            }
        };
        System.out.println(dayNum);
    }
}

Po uruchomieniu klasy otrzymujemy na konsoli:

Dziś jest niedziela
6

Uwagi
W przypadku Sro mozna było zastosować case Sro -> 2;.
Każdy z przypadków pojedynczych case lub gałęzi case musi zwracać wynik.
Nie ma default ponieważ wszystkie możliwości wynikające z enum Dni są wyczerpane (użyte) w konstrukcji switch.

SwitchExpr7.java
package switchexpr2;

import java.util.*;

public class SwitchExpr7 {
    enum Dni {Pon, Wto, Sro, Czw, Pia, Sob, Nie}

    public static void main(String[] args) {
        Dni dzien = Dni.Nie;
        String dayNum = switch (dzien) {
            case Pon, Wto, Sro, Czw, Pia -> "Dzień roboczy";
            case Sob -> "Sobota: dzień wolny od pracy";
            case Nie -> {
                Random ran = new Random();
                int dec = ran.nextInt(10);
                yield dec < 5 ? "Niedziela: Idziesz na spacer" : "Niedziela: możesz pograć w gry";
            }
        };
        System.out.println(dayNum);
    }
}

Po uruchomieniu otrzymujemy na konsoli:

Niedziela: Idziesz na spacer

Uwagi
Nie ma default ponieważ wszystkie mozliwości wynikające z enum Dni
zostału użyte w konstrukcji switch.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *