Keputusan dalam program selalu bermuara pada satu pertanyaan: kondisi ini benar atau salah? MATLAB menjawab dengan kelas logical — tipe data dua-nilai yang menjadi bahasa para kondisi, filter, dan seleksi data. Kekuatan khusus MATLAB: nilai logical bukan cuma untuk if; array logical dapat langsung dipakai sebagai mask untuk memilih elemen array yang lolos kondisi. Pada Chapter ini kita bedah tipe logical dari literal dasarnya sampai pola mask indexing yang khas MATLAB.

true, false, dan Kelas logical #

MATLAB menyediakan dua literal logika: true dan false. Keduanya adalah array 1×1 kelas logical, dan tiap elemen logical hanya memakan 1 byte. Perintah class() memastikannya:

matlab
fprintf('class true  : %s\n', class(true));
fprintf('class false : %s\n', class(false));

Output yang Dihasilkan:

text
class true  : logical
class false : logical

Di balik layar, MATLAB menyimpan true sebagai 1 dan false sebagai 0. Konversi dua arah dengan double() dan logical() memperlihatkan keterkaitan ini:

matlab
fprintf('double(true) = %d\n', double(true));
fprintf('logical(5)   = %d\n', logical(5));
fprintf('logical(0)   = %d\n', logical(0));

Output yang Dihasilkan:

text
double(true) = 1
logical(5)   = 1
logical(0)   = 0

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (double(true)): konversi ke double memunculkan representasi numeriknya, yaitu 1.
  2. Baris 2 (logical(5)): angka bukan nol apa pun dianggap true — aturan nonzero is true.
  3. Baris 3 (logical(0)): hanya nol yang menjadi false.

Aturan nonzero is true ini penting saat kita membaca kode: if 5 sah dan dianggap if true. Meski begitu, menulis kondisi secara eksplisit (if nilai > 0) tetap lebih terbaca daripada mengandalkan angka mentah.

Operator Pembanding Menghasilkan logical #

Sumber utama nilai logical adalah operator pembanding seperti >, ==, atau >=. Saat MATLAB mengevaluasi perbandingan, hasilnya bukan angka biasa, melainkan array kelas logical dengan ukuran sama seperti operand. Perhatikan data suhu pasien berikut:

matlab
suhu = [36.5 37.2 38.9 36.8 39.4];
demam = suhu > 37.5;

fprintf('class demam : %s\n', class(demam));
fprintf('nilai demam : %d %d %d %d %d\n', demam);

Output yang Dihasilkan:

text
class demam : logical
nilai demam : 0 0 1 0 1

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (suhu = [...]): vektor double berisi lima pengukuran suhu.
  2. Baris 2 (suhu > 37.5): perbandingan dijalankan elemen-per-elemen; tiap elemen menghasilkan logical 1 atau 0. Elemen 38.9 dan 39.4 melampaui 37.5 sehingga posisi ke-3 dan ke-5 bernilai 1.
  3. Baris 4-5 (class, fprintf): verifikasi menunjukkan demam berkelas logical dan isinya pola 0 0 1 0 1.

Kita akan membahas keenam operator pembanding secara mendalam pada Chapter Operator Perbandingan; saat ini cukup pahami bahwa hasil perbandingan selalu bertipe logical.

Logical sebagai Mask Indeks #

Inilah fitur paling khas MATLAB: array logical dapat ditempatkan langsung di dalam kurung indeks sebagai mask untuk memilih elemen yang nilainya true. Pola data(kondisi) mengembalikan hanya elemen-elemen yang lolos:

matlab
fprintf('Suhu demam  : %.1f %.1f\n', suhu(demam));
fprintf('Indeks demam: %d %d\n', find(demam));
fprintf('Jumlah demam: %d dari %d pengukuran\n', sum(demam), length(suhu));

Output yang Dihasilkan:

text
Suhu demam  : 38.9 39.4
Indeks demam: 3 5
Jumlah demam: 2 dari 5 pengukuran

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (suhu(demam)): mask demam menyaring vektor suhu; hanya elemen posisi 3 dan 5 yang lolos, menghasilkan [38.9 39.4] — tanpa for dan tanpa if.
  2. Baris 2 (find(demam)): fungsi find() melaporkan nomor indeks elemen yang true, bukan nilainya. Gunakan find ketika posisi yang dibutuhkan, mask ketika nilainya yang dibutuhkan.
  3. Baris 3 (sum(demam)): karena true dihitung sebagai 1, menjumlahkan mask langsung menghasilkan banyaknya elemen yang lolos — trik menghitung yang sering dipakai.

Logical dalam Kondisi #

Nilai logical adalah bahan bakar struktur kendali seperti if. Kondisi yang paling sehat berbentuk logical scalar hasil perbandingan:

matlab
nilaiUjian = 78;
if nilaiUjian >= 75
  fprintf('Hasil: Lulus\n');
else
  fprintf('Hasil: Remedial\n');
end

Output yang Dihasilkan:

text
Hasil: Lulus

Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (nilaiUjian >= 75): perbandingan menghasilkan logical scalar; 78 >= 75 bernilai true.
  2. Baris 3-5 (if ... end): blok if menjalankan cabang yang kondisinya true. Struktur kendali lengkap kita bahas pada Section Struktur Kontrol; saat ini cukup lihat bagaimana logical mengendalikan jalannya program.

Khusus untuk kondisi berbentuk array, MATLAB memakai aturan tegas: kondisi dianggap true hanya jika array tidak kosong dan semua elemennya bernilai true. Kondisi [1 1] dianggap true, sedangkan [1 0] dianggap false. Agar maksud kode selalu jelas, gunakan all(kondisi) atau any(kondisi) untuk meringkas array menjadi satu logical scalar — dua fungsi ini kita bahas pada Chapter Operator Logika.

Berkas contoh.m pada bagian bawah halaman merangkum mask, find, konversi, dan kondisi dalam satu script yang dapat dijalankan langsung.

Ringkasan #

Kelas logical menyimpan kebenaran sebagai 1 dan 0, lahir dari operator pembanding, dan mengikuti aturan nonzero is true untuk konversi dari angka. Sebagai mask, data(kondisi) memilih elemen yang lolos tanpa perulangan; find memberikan posisinya, dan sum menghitung banyaknya. Nilai logical scalar menjadi bahan bakar if, menjadikan tipe kecil ini salah satu fondasi terpenting MATLAB.