Tipe-tipe 'Switch' Dalam Java

 ⊛ • 9 mins read

Main Image
Image by Michal Jarmoluk from Pixabay

Halo semuanya, apa kabar? Mudah-mudahan selalu diberikan kesehatan ya. Pada kali ini saya akan menjelaskan mengenai Tipe-tipe ‘Switch’ Dalam Java.

Seperti yang kita ketahui, dalam Java 12, 13, dan 14 terdapat beberapa pembaruan mengenai switch yang terdapat dalam JEP 325, JEP 354, dan JEP 361.

Maka dari itu kali ini saya akan membahas pembaruan-pembaruan mengenai switch dan mereview switch yang sebelumnya atau yang biasa kita pakai saat ini.

Traditional Switch

Desain dari switch yang biasa kita pakai masih mengikuti bahasa C dan C++. Switch hanya bekerja sebagai statement dan juga mendukung semantik fall-through secara default. Contoh berikut adalah traditional switch.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch(hewan) {
    case ayam:
        System.out.println("unggas");
        break;
    case bebek:
        System.out.println("unggas");
        break;
    case gajah:
        System.out.println("mamalia");
        break;
    case kucing:
        System.out.println("mamalia");
        break;
    default:
        System.out.println("tidak tahu");
}

Atau dapat juga ditulis sebagai berikut.

1
2
3
4
5
6
7
8
9
10
11
12
switch(hewan) {
    case ayam:
    case bebek:
        System.out.println("unggas");
        break;
    case gajah:
    case kucing:
        System.out.println("mamalia");
        break;
    default:
        System.out.println("tidak tahu");
}

Pada contoh di atas terdapat beberapa break statement yang membuat kode menjadi verbose dan jika lupa menulis break statement akan terjadi fall-through yang mengakibatkan error.

Lalu bagaimana cara mengatasinya, tenang saja, dalam switch yang baru kita akan mempelajarinya. Yuk lanjuut.

The New Switch

Dalam switch yang baru, switch dapat digunakan sebagai sebuah statement ataupun expression. Selain itu juga terdapat arrow label, yield statement, dan juga dapat menampung banyak konstanta dalam tiap case. Berikut adalah pembahasannya.

• Arrow label

Tidak seperti switch yang lama yang menggunakan case L: label dalam switch, switch baru dapat menggunakan case L -> seperti berikut ini:

1
2
3
4
5
6
7
8
void transportasi(String t) {
    switch(t) {
        case "pesawat"  -> System.out.println("udara");
        case "kapal"    -> System.out.println("air");
        case "mobil"    -> System.out.println("darat");
        default         -> System.out.println("lainnya");
    }
}

Dapat juga digunakan dalam expression seperti berikut:

1
2
3
4
5
6
7
8
9
10
void transportasi(String t) {
    System.out.println(
        switch(t) {
            case "pesawat"  -> "udara";
            case "kapal"    -> "air";
            case "mobil"    -> "darat";
            default         -> "lainnya";
        }
    );
}

Dalam beberapa kasus, switch case dengan expression bisa berbentuk seperti ini:

1
2
3
4
5
T result = switch (arg) {
    case L1 -> e1;
    case L2 -> e2;
    default -> e3;
};

• Yield statement

Yield statement berfungsi untuk memberikan keluaran seperti return statement, tetapi harus memiliki nilai keluaran seperti contoh berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
void transportasi(String t) {
    System.out.println(
        switch(t) {
            case "pesawat"  -> "udara";
            case "kapal"    -> "air";
            case "mobil"    -> "darat";
            default         -> {
                t += " bukan transportasi";
                yield t;
            }
        }
    );
}

Atau juga bisa seperti ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void transportasi(String t) {
    System.out.println(
        switch(t) {
            case "pesawat"  -> "udara";
            case "kapal"    -> {
                t += " termasuk transportasi air";
                yield t;
            }
            case "mobil"    -> "darat";
            default         -> {
                t += " bukan transportasi";
                yield t;
            }
        }
    );
}

• Banyak konstanta

Tidak seperti switch tradisional yang memakai konsep fall-through yang menjadikan kode menjadi verbose, switch yang baru menghandle case yang memiliki banyak konstanta dengan pemisah koma (,).

1
2
3
4
5
6
7
8
9
10
void transportasi(String t) {
    System.out.println(
        switch(t) {
            case "pesawat", "helikopter"    -> "udara";
            case "kapal", "rakit", "perahu" -> "air";
            case "mobil", "sepeda", "kuda"  -> "darat";
            default                         -> "lainnya";
        }
    );
}

Catatan Penting

Tidak seperti switch tradisional, switch yang baru harus terdapat default case atau jika enum harus meng-cover semua elemen agar tidak terjadi error.

Jika tidak, maka akan terdapat pesan error seperti berikut dan mengakibatkan build failure.

1
error: the switch expression does not cover all possible input values

Selesai

Sekian penjelasan saya kali ini, semoga bermanfaat, sampai jumpa di artikel saya yang lainnya.

Share this post:


Tags Other Articles Apa Itu CSS Combinator Yuk! Rapikan Proyekmu dengan Package di Java