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.
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:
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:
while (hitung <= 5) { print("$hitung "); hitung++ }: variabelhitungdimulai dari 1. Setiap iterasi mencetak nilai lalu menambahnya. Loop berhenti ketikahitungmencapai 6 (kondisi menjadi false).while (persediaan > 0) { ... }denganpersediaan = 0: karena kondisi awal sudah false, body loop tidak pernah dieksekusi. Inilah perbedaan utamawhiledengando-whileyang akan kita bahas pada chapter berikutnya.- Loop pengurangan saldo: selama
saldo >= tarikPerTransaksi, satu transaksi dijalankan dansaldodikurangi. Loop berhenti ketika saldo tersisa tidak cukup untuk transaksi berikutnya. - Pencarian elemen dengan
while: dua kondisi digabung dengan&&— batas indeks dan status penemuan. Begituditemukan = true, kondisi&& !ditemukanmenjadi false dan loop berhenti.
while vs for #
| Aspek | for | while |
|---|---|---|
| Jumlah iterasi | Diketahui dari sumber iterasi | Bergantung pada kondisi |
| Sintaks | for (x in sumber) | while (kondisi) { ... } |
| State eksternal | Tidak perlu | Biasanya butuh counter/flag |
| Body mungkin tidak jalan? | Tidak, minimal 0 iterasi pada sumber kosong | Ya, 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
whileloop dengan kondisi pre-test
Setelah memahami while, kita akan melihat do-while — varian yang menjamin body berjalan minimal satu kali sebelum kondisi diperiksa.