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:

matlab
stok = 2;
if stok > 0
    fprintf('Stok tersedia: %d unit\n', stok);
else
    fprintf('Stok habis, pesanan ditunda\n');
end

Output yang Dihasilkan:

text
Stok tersedia: 2 unit

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (stok = 2): variabel stok diisi angka 2 sebagai data simulasi.
  2. Baris 2 (if stok > 0): evaluator menghitung stok > 0 menjadi logical scalar true, sehingga MATLAB siap menjalankan badan blok.
  3. Baris 3 (fprintf(...)): karena kondisi true, baris ini dieksekusi dan menampilkan jumlah stok.
  4. Baris 4-5 (else ... fprintf): jalur cadangan dilewati seluruhnya karena cabang if sudah terpenuhi.
  5. Baris 6 (end): penutup blok; eksekusi berlanjut ke pernyataan setelah end.

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:

matlab
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:

text
Nilai 87 mendapat predikat B

Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (if nilai >= 90): 87 tidak mencapai 90, jadi cabang pertama gagal dan evaluator turun ke elseif berikutnya.
  2. Baris 4 (elseif nilai >= 80): 87 melebihi 80, cabang ini true, dan predikat diisi 'B' pada baris 5.
  3. Baris 6-12: seluruh elseif, else, dan end setelahnya di-skip — tidak ada evaluasi tambahan dan hanya satu predikat yang terpasang.
  4. 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:

matlab
% 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');
end

MATLAB menolak kedua operand non-scalar itu dan menghentikan program dengan galat berikut:

text
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:

matlab
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');
end

Output yang Dihasilkan:

text
Ada pasien dengan suhu di atas 38

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (suhu = [36.5 ...]): vektor baris berisi empat data suhu pasien.
  2. Baris 2 (any(suhu > 38)): suhu > 38 menghasilkan mask logical; any() meringkas mask itu menjadi satu logical scalar — true karena pasien ke-2 dan ke-4 demam.
  3. Baris 3-5 (fprintf ... else): cabang if dijalankan; 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.