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:
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
endOutput yang Dihasilkan:
nilai pertama > 50: data(3) = 67Mari kita bedah baris-baris kode di atas:
- Baris 1 (
data = [12 45 67 23 89]): vektor data pencarian — nilai 67 dan 89 berada di posisi 3 dan 5. - Baris 2 (
for k = 1:length(data)): loop menelusuri kelima elemen dari indeks 1 sampai 5. - 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 danfprintfmenampilkan hasil. - 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:
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:
angka 1-10 tanpa kelipatan 3: 1 2 4 5 7 8 10 Mari kita bedah baris-baris kode di atas:
- Baris 1 (
fprintf('angka 1-10 ...')): judul daftar dicetak sekali sebelum loop. - Baris 3 (
if mod(k, 3) == 0):mod(k, 3)menghasilkan sisa pembagiankoleh 3; sisa 0 menandai kelipatan 3. - Baris 4 (
continue): untuk k = 3, 6, 9, eksekusi melompat sebelumfprintf('%d ', k)tercapai — tiga angka itu tidak dicetak. - 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:
% Potongan DEMONSTRASI GALAT — break tanpa loop pembungkus
if 5 > 3
break; % galat: break hanya berlaku di dalam loop
endDokumentasi 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:
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);
endOutput yang Dihasilkan:
target 5 ditemukan di baris 2 kolom 2Mari kita bedah baris-baris kode di atas:
- Baris 3 (
ketemu = false): flag diinisialisasifalse— keadaan “belum menemukan” sebelum pencarian dimulai. - 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, lalubreakhanya memutus loop dalam (indeksj). - Baris 13-15 (
if ketemu ... break): loop luar memeriksa flag begitu loop dalam selesai; karenaketemubernilaitrue, loop luar juga berhenti — baris ke-3 matriks tidak ditelusuri. - Baris 17-19 (
if ~ketemu): jalur pelaporan bila target tidak ada di seluruh matriks; operator~membalikfalsemenjaditrue.
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.