Ambalan minangka ibu saka sinau. Sanajan kita wis ngomong babagan tembung kunci saklar Jawa sadurunge, dina iki kita bakal nyemak dhasar lan golek informasi anyar.

Jawa nduweni rong jinis konstruksi switch : statement switch lan ekspresi switch. Ekspresi switch dadi resmi ing Jawa 14, wis ana ing rong varian "pratinjau" ora resmi ing versi 12 lan 13.

Nanging ayo miwiti saka wiwitan. Ayo elinga kaya apa saklar lawas sing apik sadurunge versi 12:

public String getProductTypeByName(String product) {
    String productType = "";

    switch (product) {
        case "Apple":
            productType = "Fruit";
            break;

        case "Peach":
            productType = "Fruit";
            break;

        case "Raspberry":
            productType = "Berry";
            break;

        case "Cherry":
            productType = "Berry";
            break;

        case "Tomato":
            productType = "Vegetable";
            break;

        default:
            productType = "other";
            break;
    }

    return productType;
}

Pernyataan switch minangka kumpulan konstruksi sing bakal dieksekusi siji-sijine. Ora ngidini sampeyan ngasilake nilai. Masalah utama karo nggunakake statement ngalih iku sampeyan bisa nambah nomer tanpa wates saka ungkapan cilik , lan kemampuan iki asring dilecehke dening programer.

Java 12 ndeleng tambahan fitur eksperimen: versi switch anyar - dudu statement switch, nanging ekspresi switch - sing bisa ngasilake nilai, nggunakake pemrograman fungsional sacara internal, lan nggabungake statement kasus sing duwe nilai umum, saéngga nggawe mbangun kompak.

Ing Jawa 12, sampeyan bisa nulis ulang metode getProductTypeByName() kaya ing ngisor iki:

public String getProductTypeByName(String product) {
    return switch (product) {
        case "Apple", "Peach" -> "Fruit";
        case "Raspberry", "Cherry" -> "Berry";
        case "Tomato" -> "Vegetable";
        default -> "other";

    };
}

Saiki kode katon luwih resik. Sintaks panah saka pemrograman fungsional ngidini kita ngasilake nilai tanpa tembung kunci break , lan umume, asil nglakokake switch saiki bisa disimpen menyang variabel utawa bali liwat tembung kunci bali .

Yen kita ora mung kudu ngasilake asil, nanging uga duwe pirang-pirang baris kode, mula saklar kita bakal katon kaya iki:

public String getProductTypeByName(String product) {
    var result = switch (product) {
        case "Apple", "Peach" -> {
            System.out.println("This is a Fruit");
            break "Fruit";
        }
        case "Raspberry", "Cherry" -> {
            System.out.println("This is a Berry");
            break "Berry";
        }
        case "Tomato" -> {
            System.out.println("This is a Vegetable");
            break "Vegetable";
        }
        default -> {
            break "other";
        }

    };
     return result;
}

Ing Jawa 13, ekspresi switch isih dadi fitur eksperimen. Kanggo kasedhiya, kaya ing Java 12, sampeyan kudu nggunakake printah --enable-preview nalika nyusun lan mlaku. Utama, lan mung, "inovasi" saklar ing Jawa 13 yaiku tembung kunci ngasilake , sing ngganti break .

public String getProductTypeByName(String product) {
    var result = switch (product) {
        case "Apple", "Peach" -> {
            System.out.println("This is a Fruit");
            yield "Fruit";
        }
        case "Raspberry", "Cherry" -> {
            System.out.println("This is a Berry");
            yield "Berry";
        }
        case "Tomato" -> {
            System.out.println("This is a Vegetable");
            yield "Vegetables";
        }
        default -> {
            System.out.println("Other");
            yield "other";
        }

    };
    return result;
}

Bentenane utama antarane ngasilake lan break yaiku break ngasilake kontrol eksekusi saka statement kasus , nanging ngasilake ngasilake asil kabeh switch , tumindak kaya statement bali internal .

Ing Jawa 14, operator instanceof wis diganti lan saiki bisa digunakake kaya iki:

if (o instanceof String s) {
s.toLowerCase();
}

Tinimbang cara lawas sing rada ala ing ngendi sampeyan ora mung kudu mriksa variabel nggunakake instanceof , nanging uga ngirim menyang jinis tartamtu.

if(s instanceof String) {
((String) s).toLowerCase();
}

Owah-owahan kasebut minangka bagean saka proyek Amber, sing tujuane nambah dhukungan sing cocog karo pola ing Jawa.

Thanks kanggo owah-owahan operator instanceof ing versi 14 lan ekstensi ing versi 16, pencocokan pola nggawe versi 17 sawise kabeh. Bener, saiki mung minangka pratinjau. Sampeyan bisa nyoba karo --enable-preview :

public String getObjectType(Object object) {
    return switch (object) {
        case Integer i -> "Integer";
        case Long l -> "Long";
        case String s -> "String";
        default -> object.toString();
    };
}

Umumé, saben versi anyar ndadekke fitur liyane lan liyane menarik menyang basa, kang ndadekake pangembangan Jawa malah adhem.