Program yang berguna jarang berjalan lurus dari baris pertama sampai baris terakhir. Saat memproses pesanan, program harus memeriksa stok; saat mengolah nilai ujian, program harus memilih predikat; saat memantau pasien, program harus memutuskan apakah perlu peringatan. Struktur if memberi MATLAB kemampuan mengambil keputusan semacam itu: menjalankan blok kode hanya ketika sebuah kondisi terpenuhi. Chapter ini membahas sintaks if, elseif, dan else, cara MATLAB mengevaluasi rantai kondisi, serta cara mengubah kondisi array menjadi keputusan tunggal dengan any() dan all().
Sintaks if, elseif, dan else #
Aturan utamanya: MATLAB membuka blok keputusan dengan keyword if dan wajib menutupnya dengan keyword end. Konstruksi ini berbeda dari bahasa berkurung seperti C atau Java yang memakai { } — di MATLAB, tanda kurung kurawal justru dipakai untuk membuat array, sehingga blok logika ditutup dengan kata, bukan simbol. Jika end lupa ditulis, parser MATLAB melaporkan galat sintaksis karena if tidak punya pasangan penutup.
Mekanismenya bekerja seperti ini: evaluator MATLAB menghitung ekspresi setelah if terlebih dahulu. Bila hasilnya true, blok di dalam if ... end dijalankan; bila false, MATLAB melompat ke pernyataan pertama setelah end. Blok else bersifat opsional dan menjadi jalur cadangan saat kondisi utama gagal. Perhatikan contoh pemeriksaan stok berikut — badan blok kita beri indentasi 4 spasi agar struktur terbaca:
stok = 2;
if stok > 0
fprintf('Stok tersedia: %d unit\n', stok);
else
fprintf('Stok habis, pesanan ditunda\n');
endOutput yang Dihasilkan:
Stok tersedia: 2 unitMari kita bedah baris-baris kode di atas:
- Baris 1 (
stok = 2): variabelstokdiisi angka 2 sebagai data simulasi. - Baris 2 (
if stok > 0): evaluator menghitungstok > 0menjadilogicalscalartrue, sehingga MATLAB siap menjalankan badan blok. - Baris 3 (
fprintf(...)): karena kondisitrue, baris ini dieksekusi dan menampilkan jumlah stok. - Baris 4-5 (
else ... fprintf): jalur cadangan dilewati seluruhnya karena cabangifsudah terpenuhi. - Baris 6 (
end): penutup blok; eksekusi berlanjut ke pernyataan setelahend.
Rantai elseif: Hanya Cabang Pertama yang Benar Dijalankan #
Untuk keputusan bertingkat, elseif menghubungkan banyak kondisi dalam satu blok if ... end. MATLAB mengevaluasi kondisi-kondisi tersebut dari atas ke bawah, menjalankan badan kondisi pertama yang bernilai true, lalu langsung melompat ke end — kondisi setelahnya tidak dihitung lagi. Konsekuensinya, urutan kondisi menentukan hasil: kondisi paling ketat harus ditulis lebih dulu.
Contoh klasiknya adalah klasifikasi nilai ujian menjadi predikat A sampai E:
nilai = 87;
if nilai >= 90
predikat = 'A';
elseif nilai >= 80
predikat = 'B';
elseif nilai >= 70
predikat = 'C';
elseif nilai >= 60
predikat = 'D';
else
predikat = 'E';
end
fprintf('Nilai %d mendapat predikat %s\n', nilai, predikat);Output yang Dihasilkan:
Nilai 87 mendapat predikat BMari kita bedah baris-baris kode di atas:
- Baris 2 (
if nilai >= 90): 87 tidak mencapai 90, jadi cabang pertama gagal dan evaluator turun keelseifberikutnya. - Baris 4 (
elseif nilai >= 80): 87 melebihi 80, cabang initrue, danpredikatdiisi'B'pada baris 5. - Baris 6-12: seluruh
elseif,else, danendsetelahnya di-skip — tidak ada evaluasi tambahan dan hanya satu predikat yang terpasang. - Baris 13 (
fprintf(...)): menampilkan hasil klasifikasi; eksekusi melompat ke sini begitu cabang terpilih selesai.
Alur keputusan di atas dapat digambarkan sebagai diagram cabang bertingkat:
Diagram tersebut memperlihatkan mengapa rantai elseif disebut decision cascade: setiap tanda tanya memangkas satu rentang nilai, dan hanya satu kotak predikat yang pernah tercapai.
Kondisi Non-Scalar: Ringkas dengan any dan all #
Kondisi if idealnya berupa logical scalar. Namun ekspresi pembanding pada array — misalnya suhu > 38 — menghasilkan array logical, bukan scalar. Aturan resmi MATLAB: ekspresi dianggap benar bila hasilnya tidak kosong dan seluruh elemennya bernilai benar (perilaku implisit seperti all()), sedangkan array kosong seperti [] selalu salah. Perilaku implisit ini rawan salah baca — pembaca kode bisa mengira “ada yang demam” padahal maknanya “semua demam”.
Jebakan lebih besar muncul saat operator short-circuit && dan || dipakai pada operand array:
% Potongan DEMONSTRASI GALAT — jangan dijalankan dalam script utama
suhu = [36.5 38.9 37.1 39.4];
if (suhu > 38) && (suhu < 40) % kedua operand array 1x4, bukan scalar
fprintf('Ada pasien demam ringan\n');
endMATLAB menolak kedua operand non-scalar itu dan menghentikan program dengan galat berikut:
Operands to the logical AND (&&) and OR (||) operators must be convertible to logical scalar values.Solusi idiomatiknya: nyatakan maksud kita secara eksplisit. Pemeriksaan “ada pasien demam” menjadi:
suhu = [36.5 38.9 37.1 39.4];
if any(suhu > 38)
fprintf('Ada pasien dengan suhu di atas 38\n');
else
fprintf('Semua suhu di bawah 38\n');
endOutput yang Dihasilkan:
Ada pasien dengan suhu di atas 38Mari kita bedah baris-baris kode di atas:
- Baris 1 (
suhu = [36.5 ...]): vektor baris berisi empat data suhu pasien. - Baris 2 (
any(suhu > 38)):suhu > 38menghasilkan masklogical;any()meringkas mask itu menjadi satulogicalscalar —truekarena pasien ke-2 dan ke-4 demam. - Baris 3-5 (
fprintf ... else): cabangifdijalankan; pesan alternatif untuk kondisi “semua normal” tetap tersedia.
Berkas contoh.m pada bagian bawah halaman memuat ketiga pola di atas — cabang if/else, rantai elseif klasifikasi nilai, dan pemeriksaan any() — dalam satu script yang dapat dijalankan utuh.
Ringkasan #
Blok if ... end wajib ditutup keyword end, dengan elseif untuk kondisi bertingkat dan else sebagai jalur cadangan. MATLAB mengevaluasi rantai kondisi dari atas ke bawah dan hanya menjalankan cabang pertama yang benar. Kondisi array tidak ditolak, tetapi dianggap benar hanya bila seluruh elemen benar — sehingga any() dan all() adalah cara eksplisit untuk mengubah mask array menjadi keputusan tunggal yang jelas maknanya.