Menabung Rp25.000 setiap bulan hingga mencapai target tidak bisa dihitung dengan counter tetap: jumlah bulannya sendiri baru diketahui setelah prosesnya berjalan. While loop dirancang untuk situasi seperti ini, yaitu perulangan yang bergantung pada kondisi, bukan pada jumlah putaran yang sudah pasti di awal.
Struktur While Loop #
Statement while hanya memuat satu bagian: kondisi bertipe bool. Runtime memeriksa kondisi sebelum setiap iterasi; bila true, body dijalankan, lalu pemeriksaan berulang. Bila kondisi bernilai false sejak awal, body tidak dijalankan sama sekali.
int saldo = 100000;
int target = 200000;
int bulan = 0;
while (saldo < target)
{
saldo += 25000;
bulan++;
}
Console.WriteLine($"Target tercapai setelah {bulan} bulan");
Console.WriteLine($"Saldo akhir: {saldo}");Output yang Dihasilkan:
Target tercapai setelah 4 bulan
Saldo akhir: 200000Mari kita telaah baris demi baris:
- Baris 1–3: Variabel
saldo,target, danbulanmenyiapkan keadaan awal sebelum loop berjalan. - Baris 5 (
while (saldo < target)): Kondisi100000 < 200000bernilaitrue, sehingga body dieksekusi pertama kali. - Baris 7–8: Setiap putaran menaikkan
saldosebesar 25000 dan mencatat bertambahnyabulan. - Baris 5 (pemeriksaan ulang): Setelah saldo mencapai
200000, kondisi menjadifalsedan runtime keluar dari loop.
Perhatikan bentuk penulisannya: kondisi tetap berada di dalam tanda kurung setelah kata kunci while, dan body loop dibungkus kurung kurawal meski hanya berisi dua statement. Variabel saldo dan bulan dideklarasikan di luar loop karena keduanya harus tetap hidup setelah loop selesai; kebalikannya, counter pada header for hanya hidup di dalam loop miliknya sendiri. Kedua gaya ini punya tempat masing-masing, dan pilihan jatuh pada sumber keputusan berhentinya.
Alur Eksekusi While Loop #
Sebagai teks pendukung diagram: runtime menilai kondisi lebih dulu sebelum body, sehingga while loop sering disebut pre-test loop. Perbedaan ini menjadi penting dibanding do-while loop pada chapter berikutnya, yang menilai kondisi setelah body dijalankan.
While dengan Koleksi #
Kondisi while loop sering menguji sisa data, misalnya antrian loket yang masih berisi. Karena setiap Dequeue mengeluarkan satu elemen, jumlah elemen berkurang terus dan kondisi akhirnya bernilai false.
Queue<string> antrianLoket = new Queue<string>();
antrianLoket.Enqueue("Budi");
antrianLoket.Enqueue("Siti");
antrianLoket.Enqueue("Andi");
while (antrianLoket.Count > 0)
{
Console.WriteLine($"Melayani {antrianLoket.Dequeue()}");
}
Console.WriteLine($"Sisa antrian: {antrianLoket.Count}");Output yang Dihasilkan:
Melayani Budi
Melayani Siti
Melayani Andi
Sisa antrian: 0Urutan output mengikuti urutan masuk karena Queue bersifat first-in-first-out. Setelah elemen Andi keluar, properti Count bernilai 0, kondisi menjadi false, dan program melanjutkan ke statement pencetak sisa antrian.
Pada kasus ini foreach loop kurang tepat dipakai: foreach mengunjungi elemen tanpa mengubah koleksi, sehingga antrian tidak pernah terkuras. While loop menyisakan keputusan pengeluaran elemen kepada kita melalui Dequeue, sehingga syarat Count > 0 benar-benar berubah dari putaran ke putaran. Prinsipnya sederhana: pastikan setiap putaran membawa keadaan lebih dekat ke kondisi berhenti.