while loop digunakan ketika jumlah iterasi tidak diketahui sejak awal dan hanya bergantung pada kondisi yang berubah selama loop berjalan. Kotlin mengevaluasi kondisi sebelum setiap iterasi: bila kondisi false sejak awal, body loop tidak pernah dieksekusi. Karakteristik ini membuat while cocok untuk skenario pencarian, pengurangan saldo, dan pemrosesan data hingga kondisi berhenti terpenuhi. Pada chapter ini kita akan membandingkan while dengan for, serta menerapkannya pada kasus transaksi berulang dan pencarian elemen.

Bentuk Dasar while #

Bentuk dasar while (kondisi) { body } mengevaluasi kondisi sebelum setiap iterasi. Selama kondisi true, body dieksekusi; begitu kondisi menjadi false, loop berhenti dan eksekusi berlanjut ke baris berikutnya.

kotlin
fun main() {
    // while: kondisi diperiksa sebelum setiap iterasi
    var hitung = 1
    print("Hitung naik: ")
    while (hitung <= 5) {
        print("$hitung ")
        hitung++
    }
    println()

    // while body bisa tidak pernah dieksekusi bila kondisi awal false
    var persediaan = 0
    while (persediaan > 0) {
        println("Tidak akan tercetak")
        persediaan--
    }
    println("Setelah loop persediaan: $persediaan (body dilewati)")

    // Proses pengurangan saldo sampai habis
    var saldo = 5_000
    val tarikPerTransaksi = 1_500
    var jumlahTransaksi = 0
    while (saldo >= tarikPerTransaksi) {
        saldo -= tarikPerTransaksi
        jumlahTransaksi++
        println("Transaksi #$jumlahTransaksi, sisa saldo: $saldo")
    }
    println("Total transaksi: $jumlahTransaksi, sisa saldo akhir: $saldo")

    // while untuk pencarian: berhenti ketika kondisi terpenuhi
    val data = listOf(3, 7, 2, 9, 4, 8, 1)
    var indeks = 0
    var ditemukan = false
    while (indeks < data.size && !ditemukan) {
        if (data[indeks] > 8) {
            ditemukan = true
        } else {
            indeks++
        }
    }
    if (ditemukan) {
        println("Elemen > 8 pertama ada di indeks $indeks (nilai ${data[indeks]})")
    } else {
        println("Tidak ada elemen > 8")
    }
}

Output yang Dihasilkan:

text
Hitung naik: 1 2 3 4 5 
Setelah loop persediaan: 0 (body dilewati)
Transaksi #1, sisa saldo: 3500
Transaksi #2, sisa saldo: 2000
Transaksi #3, sisa saldo: 500
Total transaksi: 3, sisa saldo akhir: 500
Elemen > 8 pertama ada di indeks 3 (nilai 9)

Mari kita bedah setiap bagian penting:

  1. while (hitung <= 5) { print("$hitung "); hitung++ }: variabel hitung dimulai dari 1. Setiap iterasi mencetak nilai lalu menambahnya. Loop berhenti ketika hitung mencapai 6 (kondisi menjadi false).
  2. while (persediaan > 0) { ... } dengan persediaan = 0: karena kondisi awal sudah false, body loop tidak pernah dieksekusi. Inilah perbedaan utama while dengan do-while yang akan kita bahas pada chapter berikutnya.
  3. Loop pengurangan saldo: selama saldo >= tarikPerTransaksi, satu transaksi dijalankan dan saldo dikurangi. Loop berhenti ketika saldo tersisa tidak cukup untuk transaksi berikutnya.
  4. Pencarian elemen dengan while: dua kondisi digabung dengan && — batas indeks dan status penemuan. Begitu ditemukan = true, kondisi && !ditemukan menjadi false dan loop berhenti.

while vs for #

Aspekforwhile
Jumlah iterasiDiketahui dari sumber iterasiBergantung pada kondisi
Sintaksfor (x in sumber)while (kondisi) { ... }
State eksternalTidak perluBiasanya butuh counter/flag
Body mungkin tidak jalan?Tidak, minimal 0 iterasi pada sumber kosongYa, bila kondisi awal false

Body Loop yang Tidak Pernah Dijalankan #

Karakteristik penting while adalah kondisi diperiksa sebelum iterasi pertama. Akibatnya, bila kondisi sudah false sejak awal, body tidak pernah dieksekusi sama sekali. Ini berguna untuk kasus di mana kita ingin melewati seluruh pemrosesan ketika data input tidak memenuhi syarat.

Pola Pencarian dengan Flag #

Pencarian elemen sering memanfaatkan dua kondisi: batas indeks (mencegah akses di luar list) dan flag penemuan. Operator && mengevaluasi kiri ke kanan, sehingga indeks < data.size dicek lebih dulu sebelum data[indeks] diakses pada if di dalam body.

Referensi Lanjutan #

  • Control flow — panduan resmi while loop dengan kondisi pre-test

Setelah memahami while, kita akan melihat do-while — varian yang menjamin body berjalan minimal satu kali sebelum kondisi diperiksa.