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:
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);
endOutput yang Dihasilkan:
Menu mie dipilih, harga Rp12000Mari kita bedah baris-baris kode di atas:
- Baris 1 (
pilihan = 'mie'): variabelpilihanmenyimpan menu yang diminta pengguna. - Baris 2 (
switch pilihan): MATLAB mengevaluasipilihansatu kali, lalu menyiapkan pembandingan terhadap setiapcaseberikutnya. - Baris 5 (
case 'mie'):strcmp('mie', 'mie')bernilai 1, sehingga blok ini dipilih danhargadiisi12000. Pembandingancharbersifat case-sensitive —'Mie'tidak akan cocok. - Baris 9 (
otherwise): jalur cadangan saat tidak adacaseyang cocok, miripelsepada strukturif. - Baris 13 (
if harga > 0): blokifdi luarswitchmemastikan 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:
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:
Hari ke-7 adalah akhir pekanMari kita bedah baris-baris kode di atas:
- Baris 1 (
hari = 7): angka hari 1 sampai 7 sebagai nilai uji. - Baris 3 (
case {1, 2, 3, 4, 5}):casepertama memuat lima nilai; angka 7 tidak termasuk, jadi blok ini dilewati. - Baris 5 (
case {6, 7}): angka 7 cocok dengan elemen kedua, sehinggakategoridiisi'akhir pekan'. - 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:
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');
endOutput yang Dihasilkan:
case pertama cocok: hasil = 52Mari kita bedah baris-baris kode di atas:
- Baris 2 (
switch hasil): nilai uji adalah 52. - Baris 3 (
case 52): cocok persis, blok ini dijalankan, lalu MATLAB keluar dariswitch. - 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:
| Aspek | switch-case | if-elseif-else |
|---|---|---|
| Basis keputusan | kesetaraan nilai tunggal (==, strcmp) | kondisi bebas: rentang, kombinasi &&/|| |
| Nilai uji yang cocok | scalar angka atau char | ekspresi logical apa pun |
| Banyak nilai per cabang | case {1, 2, 3} | k == 1 || k == 2 || k == 3 |
| Jalur cadangan | otherwise | else |
| Medan terbaik | menu, kode, kategori diskrit | klasifikasi 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.