do-while adalah varian while yang mengeksekusi body minimal satu kali sebelum kondisi diperiksa. Karakteristik ini berguna ketika kita perlu menjalankan aksi terlebih dahulu, lalu memutuskan apakah perlu mengulang berdasarkan hasil aksi tersebut. Kasus klasik adalah validasi input: minta pengguna memasukkan nilai, periksa validitasnya, lalu minta ulang bila tidak valid. Pada chapter ini kita akan membahas bentuk do-while, perbedaan dengan while, dan penerapannya pada simulasi validasi input.
Bentuk Dasar do-while #
Bentuk dasar do { body } while (kondisi) mengeksekusi body terlebih dahulu, kemudian mengevaluasi kondisi. Bila kondisi true, body dieksekusi lagi; bila false, loop berhenti.
fun main() {
// do-while: body dieksekusi minimal satu kali
var pencacah = 1
print("Pencacah naik: ")
do {
print("$pencacah ")
pencacah++
} while (pencacah <= 5)
println()
// Body tetap berjalan satu kali walau kondisi awal sudah false
var persediaan = 0
do {
println("Memproses persediaan (nilai $persediaan)")
persediaan--
} while (persediaan > 0)
println("Akhir: persediaan = $persediaan")
// Validasi input: minta ulang sampai valid
val masukan = listOf("-5", "0", "abc", "75")
var posisi = 0
var nilaiValid = 0
do {
val teks = masukan[posisi]
val parsed = teks.toIntOrNull()
if (parsed != null && parsed in 1..100) {
nilaiValid = parsed
println("Input '$teks' diterima sebagai $nilaiValid")
} else {
println("Input '$teks' tidak valid, coba lagi")
}
posisi++
} while (nilaiValid == 0 && posisi < masukan.size)
if (nilaiValid > 0) {
println("Nilai akhir yang diterima: $nilaiValid")
} else {
println("Tidak ada input valid")
}
// do-while untuk menu interaktif simulasi
var pilihan = 3
do {
println("Menampilkan menu (pilihan=$pilihan)")
pilihan--
} while (pilihan > 0)
println("Menu ditutup")
}Output yang Dihasilkan:
Pencacah naik: 1 2 3 4 5
Memproses persediaan (nilai 0)
Akhir: persediaan = -1
Input '-5' tidak valid, coba lagi
Input '0' tidak valid, coba lagi
Input 'abc' tidak valid, coba lagi
Input '75' diterima sebagai 75
Nilai akhir yang diterima: 75
Menampilkan menu (pilihan=3)
Menampilkan menu (pilihan=2)
Menampilkan menu (pilihan=1)
Menu ditutupMari kita bedah setiap bagian penting:
do { print("$pencacah "); pencacah++ } while (pencacah <= 5):pencacahdimulai dari 1. Body mencetak nilai lalu menambahnya. Kondisi<= 5diperiksa setelah body dijalankan, sehingga iterasi tetap berlangsung sampaipencacah = 6.do { ... } while (persediaan > 0)denganpersediaan = 0: meski kondisi awal sudah false (0 > 0 adalah false), body tetap dieksekusi satu kali. Inilah perbedaan utama denganwhile. Setelah iterasi pertama,persediaanmenjadi-1dan loop berhenti.- Validasi input berulang: loop membaca elemen dari list
masukansatu per satu.toIntOrNull()mengembalikannullbila teks bukan angka. Pengecekanparsed in 1..100memastikan nilai berada di rentang yang valid. Loop berhenti ketika ditemukan nilai valid atau ketika iterasi sudah mencapai akhir list. - Menu interaktif simulasi:
pilihanmulai dari 3 dan berkurang satu setiap iterasi. Loop berhenti setelahpilihanmencapai 0. Bentuk ini menyerupai pemrosesan pilihan menu pada aplikasi CLI.
Perbedaan dengan while #
| Aspek | while | do-while |
|---|---|---|
| Saat kondisi diperiksa | Sebelum body | Setelah body |
| Body minimal berjalan | 0 kali | 1 kali |
| Cocok untuk | iterasi kondisional murni | aksi sekali lalu evaluasi ulang |
| Sintaks | while (kondisi) { ... } | do { ... } while (kondisi) |
Validasi Input dengan do-while #
Salah satu penerapan paling alami do-while adalah validasi input pengguna. Kita ingin meminta input sekali, lalu memutuskan apakah perlu meminta ulang. Dengan do-while, aksi baca input selalu terjadi minimal satu kali, dan kondisi pengulangan menentukan apakah perlu minta lagi.
Pola “Lalu Evaluasi” #
Banyak algoritma memerlukan pola “lakukan satu langkah, lalu evaluasi apakah cukup”. Contoh klasik: pendekatan numerik yang melakukan iterasi sampai hasil konvergen. Karena hasil baru diketahui setelah iterasi dijalankan, do-while cocok dipakai:
Kapan Menggunakan do-while #
Gunakan do-while ketika Anda yakin aksi pertama harus dijalankan minimal satu kali sebelum evaluasi kondisi. Untuk kasus di mana body bisa jadi tidak perlu dijalankan sama sekali, while lebih sesuai.
Referensi Lanjutan #
- Control flow
— panduan resmi
do-whileloop dengan post-test
Setelah memahami tiga konstruksi loop utama (for, while, do-while), chapter berikutnya akan membahas range dan progression — tipe yang menjadi fondasi iterasi numerik pada Kotlin.