Banyak keputusan dalam program tidak berbentuk rentang, melainkan daftar pilihan diskrit: nomor menu makanan, kode hari, tipe grafik yang dipilih pengguna. Ketika satu nilai harus dicocokkan terhadap sekumpulan nilai tetap, rantai if-elseif menjadi bertele-tele — setiap cabang mengulang ekspresi pembanding. Struktur switch-case dirancang persis untuk situasi itu: satu ekspresi diuji sekali, lalu dibandingkan terhadap daftar nilai case sampai ditemukan kecocokan. Chapter ini membahas sintaksnya, perilaku “hanya case pertama yang cocok”, dan kapan switch lebih tepat daripada if.

Sintaks switch, case, dan otherwise #

Aturan dasarnya: blok switch diawali keyword switch dan ditutup keyword end. Nilai yang diuji ditulis setelah switch; setiap kandidat kecocokan menjadi satu blok case; blok otherwise bersifat opsional sebagai jalur bila tidak ada case yang cocok. Berbeda dari switch bahasa C, MATLAB tidak melakukan pattern matching ataupun rentang — mekanisme di balik layarnya adalah uji kesetaraan: untuk angka, MATLAB mengevaluasi case_expression == switch_expression; untuk char, MATLAB memakai pembandingan strcmp. Operator pembanding seperti < atau > tidak berlaku di dalam case.

Contoh berikut memetakan pilihan menu makanan (data char) ke harga:

matlab
pilihan = 'mie';
switch pilihan
    case 'nasi'
        harga = 15000;
    case 'mie'
        harga = 12000;
    case 'sate'
        harga = 25000;
    otherwise
        harga = 0;
        fprintf('Menu %s tidak tersedia\n', pilihan);
end
if harga > 0
    fprintf('Menu %s dipilih, harga Rp%d\n', pilihan, harga);
end

Output yang Dihasilkan:

text
Menu mie dipilih, harga Rp12000

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (pilihan = 'mie'): variabel pilihan menyimpan menu yang diminta pengguna.
  2. Baris 2 (switch pilihan): MATLAB mengevaluasi pilihan satu kali, lalu menyiapkan pembandingan terhadap setiap case berikutnya.
  3. Baris 5 (case 'mie'): strcmp('mie', 'mie') bernilai 1, sehingga blok ini dipilih dan harga diisi 12000. Pembandingan char bersifat case-sensitive — 'Mie' tidak akan cocok.
  4. Baris 9 (otherwise): jalur cadangan saat tidak ada case yang cocok, mirip else pada struktur if.
  5. Baris 13 (if harga > 0): blok if di luar switch memastikan harga hanya ditampilkan untuk menu yang tersedia.

Case dengan Banyak Nilai #

Satu case dapat menampung beberapa nilai sekaligus dengan membungkusnya dalam cell array: case {6, 7} cocok bila switch_expression sama dengan salah satu elemennya. Mekanisme di balik layar: MATLAB membandingkan nilai uji terhadap setiap elemen cell array itu, satu per satu, sampai salah satu cocok. Fitur ini menggantikan deretan || yang akan kita butuhkan pada if.

Contoh klasiknya adalah pengelompokan angka hari menjadi kategori:

matlab
hari = 7;
switch hari
    case {1, 2, 3, 4, 5}
        kategori = 'hari kerja';
    case {6, 7}
        kategori = 'akhir pekan';
    otherwise
        kategori = 'tidak valid';
end
fprintf('Hari ke-%d adalah %s\n', hari, kategori);

Output yang Dihasilkan:

text
Hari ke-7 adalah akhir pekan

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (hari = 7): angka hari 1 sampai 7 sebagai nilai uji.
  2. Baris 3 (case {1, 2, 3, 4, 5}): case pertama memuat lima nilai; angka 7 tidak termasuk, jadi blok ini dilewati.
  3. Baris 5 (case {6, 7}): angka 7 cocok dengan elemen kedua, sehingga kategori diisi 'akhir pekan'.
  4. Baris 7 (otherwise): menjaga program tetap aman bila nilai di luar 1-7 (misalnya 0 atau 12) masuk.

Hanya Case Pertama yang Cocok Dijalankan #

switch MATLAB tidak melakukan fall-through seperti switch bahasa C. Begitu satu case terbukti cocok, MATLAB menjalankan badan case itu lalu langsung keluar dari blok switch — case lain yang juga cocok tidak akan dieksekusi. Karena itu tidak perlu menulis break di akhir setiap case. Perhatikan contoh resmi berikut yang sengaja membuat dua case yang sama-sama cocok:

matlab
hasil = 52;
switch hasil
    case 52
        fprintf('case pertama cocok: hasil = 52\n');
    case {52, 78}
        fprintf('case kedua cocok: hasil = 52 atau 78\n');
end

Output yang Dihasilkan:

text
case pertama cocok: hasil = 52

Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (switch hasil): nilai uji adalah 52.
  2. Baris 3 (case 52): cocok persis, blok ini dijalankan, lalu MATLAB keluar dari switch.
  3. Baris 5 (case {52, 78}): meskipun 52 juga termasuk anggota cell array ini, blok ini sudah tidak pernah diuji lagi — bukti nyata “hanya case pertama”.

switch atau if-elseif #

Keduanya bisa saling menggantikan, tetapi masing-masing punya medan terbaik. Gunakan tabel berikut sebagai pegangan:

Aspekswitch-caseif-elseif-else
Basis keputusankesetaraan nilai tunggal (==, strcmp)kondisi bebas: rentang, kombinasi &&/||
Nilai uji yang cocokscalar angka atau charekspresi logical apa pun
Banyak nilai per cabangcase {1, 2, 3}k == 1 || k == 2 || k == 3
Jalur cadanganotherwiseelse
Medan terbaikmenu, kode, kategori diskritklasifikasi rentang, validasi kondisi

Berkas contoh.m pada bagian bawah halaman menjalankan ketiga contoh di atas secara berurutan: menu makanan, pengelompokan hari, dan demonstrasi “case pertama yang menang”.

Ringkasan #

switch menguji satu ekspresi terhadap daftar nilai case lewat kesetaraan — bukan pattern matching dan bukan rentang. case {a, b, c} memuat banyak nilai dalam satu cabang, otherwise menjadi jalur cadangan, dan hanya case pertama yang cocok dijalankan tanpa fall-through. Pilih switch untuk keputusan berbasis nilai diskrit dan if-elseif untuk keputusan berbasis rentang atau kombinasi kondisi.