Loop yang sehat kadang perlu melanggar jadwalnya sendiri: pencarian berhenti begitu target ditemukan karena memeriksa sisa data hanya membuang waktu; pemfilteran melewati data yang tidak relevan tanpa membatalkan seluruh proses. MATLAB menyediakan dua keyword untuk dua kebutuhan itu — break keluar dari loop lebih awal, continue melewati satu iterasi. Keduanya sederhana di loop tunggal, tetapi interaksinya dengan loop bersarang memuat aturan yang sering menjebak pemula: break hanya keluar dari loop terdalam. Chapter ini membahas keduanya beserta pola pendukungnya.

break: Keluar dari Loop #

Aturannya: break menghentikan loop yang paling dekat membungkusnya — MATLAB melompat seketika ke pernyataan setelah end loop itu, membuang sisa iterasi yang belum berjalan. Untuk loop for, variabel loop tetap memuat nilai saat break terjadi. Pola paling umum bernama temukan pertama (find first): telusuri data, dan begitu satu kecocokan ditemukan, berhenti — lanjut mencari hanya memboroskan waktu:

matlab
data = [12 45 67 23 89];
for k = 1:length(data)
    if data(k) > 50
        fprintf('nilai pertama > 50: data(%d) = %d\n', k, data(k));
        break;
    end
end

Output yang Dihasilkan:

text
nilai pertama > 50: data(3) = 67

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (data = [12 45 67 23 89]): vektor data pencarian — nilai 67 dan 89 berada di posisi 3 dan 5.
  2. Baris 2 (for k = 1:length(data)): loop menelusuri kelima elemen dari indeks 1 sampai 5.
  3. Baris 3-4 (if data(k) > 50): elemen 12 dan 45 gagal uji, jadi iterasi 1 dan 2 hanya menjalankan pengujian; pada iterasi ke-3, 67 lolos dan fprintf menampilkan hasil.
  4. Baris 5 (break): loop berhenti di indeks 3 — elemen 23 dan 89 tidak pernah diperiksa; inilah penghematan kerja yang menjadi tujuan pola find first.

continue: Lewati Satu Iterasi #

continue tidak menghentikan loop; keyword ini melewati sisa badan iterasi saat ini dan melompat langsung ke iterasi berikutnya. Untuk for, variabel loop maju seperti biasa; untuk while, eksekusi kembali ke pengujian kondisi. Pola khasnya adalah filter: iterasi berlanjut, tetapi elemen tertentu diabaikan:

matlab
fprintf('angka 1-10 tanpa kelipatan 3: ');
for k = 1:10
    if mod(k, 3) == 0
        continue;   % mod(k,3): sisa pembagian k oleh 3
    end
    fprintf('%d ', k);
end
fprintf('\n');

Output yang Dihasilkan:

text
angka 1-10 tanpa kelipatan 3: 1 2 4 5 7 8 10 

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (fprintf('angka 1-10 ...')): judul daftar dicetak sekali sebelum loop.
  2. Baris 3 (if mod(k, 3) == 0): mod(k, 3) menghasilkan sisa pembagian k oleh 3; sisa 0 menandai kelipatan 3.
  3. Baris 4 (continue): untuk k = 3, 6, 9, eksekusi melompat sebelum fprintf('%d ', k) tercapai — tiga angka itu tidak dicetak.
  4. Baris 6 (fprintf('%d ', k)): hanya dieksekusi untuk angka yang lolos filter; perhatikan bahwa baris ini tetap satu loop penuh 10 iterasi, bukan loop yang berhenti.

break Tidak Keluar dari if #

Fakta yang mengejutkan pemindah bahasa C: break hanya mengenali loop. Ketika break ditulis di dalam blok if, MATLAB mencari for atau while paling dekat yang membungkus if itu — dan keluar dari loop tersebut, bukan dari blok if. Bila tidak ada loop pembungkus sama sekali, break bahkan tidak terdefinisi:

matlab
% Potongan DEMONSTRASI GALAT — break tanpa loop pembungkus
if 5 > 3
    break;    % galat: break hanya berlaku di dalam loop
end

Dokumentasi resmi MATLAB menyatakan tegas: break is not defined outside a for or while loop — potongan di atas dihentikan MATLAB begitu script dijalankan. Blok if memang bukan loop; blok if selesai sendiri di end-nya dan tidak punya konsep “iterasi berikutnya” untuk dilewati. Kebutuhan “keluar lebih awal” yang sering dikacaukan dengan break — misalnya keluar dari sebuah function — jawabannya adalah keyword return yang kita bahas pada Section Fungsi.

break pada Loop Bersarang: Pola Flag #

Aturan tersarangnya: break hanya keluar dari loop terdalam — satu break tidak mampu melompat keluar dari dua loop sekaligus. Untuk keluar dari seluruh struktur bersarang, kita memakai flag (variabel logical) yang diperiksa loop luar setelah loop dalam selesai:

matlab
M = [1 2; 4 5; 7 8];
target = 5;
ketemu = false;
for i = 1:size(M, 1)
    for j = 1:size(M, 2)
        if M(i, j) == target
            ketemu = true;
            fprintf('target %d ditemukan di baris %d kolom %d\n', ...
                    target, i, j);
            break;   % hanya keluar dari loop dalam
        end
    end
    if ketemu
        break;       % keluar dari loop luar
    end
end
if ~ketemu
    fprintf('target %d tidak ditemukan\n', target);
end

Output yang Dihasilkan:

text
target 5 ditemukan di baris 2 kolom 2

Mari kita bedah baris-baris kode di atas:

  1. Baris 3 (ketemu = false): flag diinisialisasi false — keadaan “belum menemukan” sebelum pencarian dimulai.
  2. Baris 4-10 (loop luar dan dalam): pencarian elemen demi elemen; saat target 5 ditemukan di posisi (2,2), flag diubah menjadi true, posisi dicetak, lalu break hanya memutus loop dalam (indeks j).
  3. Baris 13-15 (if ketemu ... break): loop luar memeriksa flag begitu loop dalam selesai; karena ketemu bernilai true, loop luar juga berhenti — baris ke-3 matriks tidak ditelusuri.
  4. Baris 17-19 (if ~ketemu): jalur pelaporan bila target tidak ada di seluruh matriks; operator ~ membalik false menjadi true.

Berkas contoh.m pada bagian bawah halaman menjalankan ketiga pola — find first, filter continue, dan pencarian matriks dengan flag — dalam satu script utuh.

Ringkasan #

break keluar dari loop terdalam yang membungkusnya dan tidak berpengaruh pada blok if, sementara continue melewati sisa badan iterasi dan melanjutkan loop. Pola find first memakai break untuk berhenti saat kecocokan pertama ditemukan; pola filter memakai continue untuk mengabaikan elemen tertentu. Loop bersarang membutuhkan flag logical yang diperiksa loop luar, karena satu break tidak pernah keluar dari dua loop sekaligus.