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.

kotlin
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:

text
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 ditutup

Mari kita bedah setiap bagian penting:

  1. do { print("$pencacah "); pencacah++ } while (pencacah <= 5): pencacah dimulai dari 1. Body mencetak nilai lalu menambahnya. Kondisi <= 5 diperiksa setelah body dijalankan, sehingga iterasi tetap berlangsung sampai pencacah = 6.
  2. do { ... } while (persediaan > 0) dengan persediaan = 0: meski kondisi awal sudah false (0 > 0 adalah false), body tetap dieksekusi satu kali. Inilah perbedaan utama dengan while. Setelah iterasi pertama, persediaan menjadi -1 dan loop berhenti.
  3. Validasi input berulang: loop membaca elemen dari list masukan satu per satu. toIntOrNull() mengembalikan null bila teks bukan angka. Pengecekan parsed in 1..100 memastikan nilai berada di rentang yang valid. Loop berhenti ketika ditemukan nilai valid atau ketika iterasi sudah mencapai akhir list.
  4. Menu interaktif simulasi: pilihan mulai dari 3 dan berkurang satu setiap iterasi. Loop berhenti setelah pilihan mencapai 0. Bentuk ini menyerupai pemrosesan pilihan menu pada aplikasi CLI.

Perbedaan dengan while #

Aspekwhiledo-while
Saat kondisi diperiksaSebelum bodySetelah body
Body minimal berjalan0 kali1 kali
Cocok untukiterasi kondisional murniaksi sekali lalu evaluasi ulang
Sintakswhile (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-while loop 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.