Petugas loket bank menentukan layanan berdasarkan nomor antrian: nomor 1 menuju pembukaan rekening, nomor 2 menuju pembayaran tagihan, dan seterusnya. Menuliskan keputusan seperti ini sebagai rantai if–else if membuat perbandingan yang sama berulang-ulang sehingga kode panjang dan sulit dibaca. Statement switch membandingkan satu nilai terhadap banyak label case dalam satu struktur yang rapi.

Struktur Switch Statement #

Compiler mengevaluasi ekspresi di dalam switch (...) satu kali, lalu mencocokkan hasilnya dengan label case dari atas ke bawah. Setiap case yang berisi statement wajib diakhiri break untuk keluar dari switch, dan label default menampung nilai yang tidak cocok dengan case mana pun. Posisi default sebenarnya bebas, tetapi kebiasaan umum menempatkannya di bagian akhir.

csharp
int nomorAntrian = 2;

switch (nomorAntrian)
{
    case 1:
        Console.WriteLine("Loket 1: pembukaan rekening");
        break;
    case 2:
        Console.WriteLine("Loket 2: pembayaran tagihan");
        break;
    case 3:
        Console.WriteLine("Loket 3: pengambilan kartu");
        break;
    default:
        Console.WriteLine("Silakan menunggu di ruang tunggu");
        break;
}

Output yang Dihasilkan:

text
Loket 2: pembayaran tagihan

Mari kita telaah baris demi baris:

  1. Baris 1 (int nomorAntrian = 2;): Variabel yang menjadi input pencocokan dideklarasikan lebih dulu.
  2. Baris 3 (switch (nomorAntrian)): Compiler mengevaluasi nomorAntrian satu kali dan menghasilkan nilai 2.
  3. Baris 5–7 (case 1): Nilai 2 tidak sama dengan 1, sehingga compiler melewati case ini tanpa menjalankan apa pun.
  4. Baris 8–10 (case 2): Nilai cocok, sehingga statement di dalam case dijalankan dan break menghentikan pencocokan.
  5. Baris 16–18 (default): Karena case sebelumnya sudah terpilih, bagian default tidak dievaluasi lagi.

Mengelompokkan Case #

Dua case yang perlakuannya sama boleh ditumpuk: case kosong tanpa statement akan jatuh ke label berikutnya. Pola ini berguna untuk mengelompokkan nilai yang mendapat hasil sama, misalnya nilai ujian huruf A dan B yang sama-sama lulus dengan baik.

csharp
string nilaiHuruf = "B";

switch (nilaiHuruf)
{
    case "A":
    case "B":
        Console.WriteLine("Lulus dengan baik");
        break;
    case "C":
        Console.WriteLine("Lulus");
        break;
    default:
        Console.WriteLine("Perlu bimbingan tambahan");
        break;
}

Output yang Dihasilkan:

text
Lulus dengan baik

Nilai "B" tidak cocok dengan case "A" yang kosong, lalu jatuh ke case "B" dan mencetak hasilnya. Perlu ditegaskan bahwa hanya case kosong yang boleh menumpuk; case yang sudah berisi statement wajib ditutup break.

Kapan Memilih Switch Statement #

Switch statement paling cocok bila setiap cabang membandingkan nilai yang sama dengan konstanta yang berbeda, dan tiap cabang menjalankan beberapa statement. Untuk rentang nilai atau kondisi gabungan, if–else if tetap lebih luwes. Bila tiap cabang hanya menghasilkan satu nilai, chapter berikutnya memperkenalkan switch expression yang lebih ringkas lagi.