While & do-while
Perulangan while untuk kondisi tak tentu, dan do-while yang jalan minimal sekali.
Mengulang selama kondisi terpenuhi
for cocok saat kamu tahu jumlah pengulangannya. Tapi bagaimana kalau pengulangan harus berhenti saat sesuatu terjadi, misalnya "ulangi lempar dadu sampai dapat angka 6"? Jumlahnya tidak diketahui di awal. Di sinilah while berperan.
Analogi: for seperti "lari 5 putaran lapangan", jumlahnya pasti. while seperti "lari sampai capek", berhentinya tergantung kondisi.
Kenapa while ada?
Banyak proses dunia nyata tidak punya jumlah pasti: membaca input sampai pengguna mengetik "keluar", mencoba koneksi sampai berhasil, game loop yang jalan sampai pemain kalah. while mengecek kondisi sebelum tiap putaran dan berhenti begitu kondisi false.
Bentuk dasar while
void main() {
int angka = 1;
while (angka <= 5) {
print('Angka: $angka');
angka++; // JANGAN LUPA: penghitung harus berubah!
}
print('Selesai, angka terakhir: $angka');
}Jejak: angka=1 cetak, 2 cetak, 3 cetak, 4 cetak, 5 cetak, 6 → kondisi false → keluar. Baris angka++ adalah nyawa loop ini; tanpanya kondisi tidak pernah false.
Contoh kedua yang lebih "while banget", mensimulasikan lempar dadu:
import 'dart:math';
void main() {
var acak = Random();
int dadu = 0;
int lemparan = 0;
while (dadu != 6) {
dadu = acak.nextInt(6) + 1; // angka 1-6
lemparan++;
print('Lemparan $lemparan: $dadu');
}
print('Dapat 6 setelah $lemparan lemparan!');
}Tidak ada yang tahu butuh berapa lemparan, dan itu tidak masalah. while memang dirancang untuk ketidakpastian jumlah.
do-while: cek di akhir
Ada varian di mana kondisi dicek setelah putaran, sehingga blok pasti jalan minimal sekali:
void main() {
int angka = 100;
do {
print('Angka: $angka');
angka++;
} while (angka <= 5);
print('Tetap jalan sekali walau kondisi langsung false');
}Walau angka sudah 100 (kondisi false sejak awal), blok tetap dieksekusi satu kali. Kegunaan klasik: menampilkan menu yang minimal tampil sekali sebelum mengecek pilihan pengguna.
Perbandingan ketiganya:
void main() {
// for: jumlah pasti
for (int i = 0; i < 3; i++) {
print('for: $i');
}
// while: cek dulu, bisa nol kali
int a = 10;
while (a < 3) {
print('while: tidak pernah tercetak');
a++;
}
// do-while: jalan dulu, minimal sekali
int b = 10;
do {
print('do-while: tercetak sekali');
b++;
} while (b < 3);
}Kesalahan umum pemula
1. Loop tak berujung karena lupa update
// SALAH: angka tidak pernah berubah, macet selamanya
// int angka = 1;
// while (angka <= 5) {
// print(angka);
// }// BENAR
void main() {
int angka = 1;
while (angka <= 5) {
print(angka);
angka++;
}
}Di for, update ada di header sehingga sulit lupa. Di while, update ada di badan loop dan mudah terlewat. Selalu periksa: "apakah kondisiku bisa menjadi false?"
2. Kondisi yang tidak pernah true
void main() {
int angka = 10;
while (angka < 5) {
print('tidak pernah jalan');
angka++;
}
print('langsung ke sini');
}Ini bukan error, tapi sering mengejutkan pemula yang mengira blok while "pasti jalan sekali". Kalau butuh jaminan sekali jalan, pakai do-while.
3. Titik koma setelah while
// SALAH
void main() {
int angka = 1;
while (angka <= 5); // titik koma = badan loop kosong!
{
print(angka);
angka++;
}
}// BENAR
void main() {
int angka = 1;
while (angka <= 5) {
print(angka);
angka++;
}
}Kesimpulan
for untuk jumlah pasti, while untuk "selama kondisi", do-while untuk "minimal sekali". Aturan emas while: pastikan ada jalan menuju kondisi false, atau programmu macet selamanya.
Catatan teknis:
while (true)adalah loop tak berujung yang disengaja, umum di server dan game loop. Ia aman dipakai ASALKAN adabreakataureturndi dalamnya sebagai pintu keluar.
Tantangan
Tebak angka menurun
Mulai dari 10, kurangi 1 tiap putaran dengan while sampai 1, cetak tiap angka. Lalu ulangi versi do-while mulai dari 3.
void main() {
// TODO: while dari 10 ke 1, lalu do-while dari 3 ke 1
}