for loop di Kotlin berbeda dengan for tradisional berbasis indeks di C atau Java. Kotlin memperlakukan for sebagai iterasi atas sumber yang menyediakan iterator, sehingga sintaksnya konsisten: for (item in sumber). Sumber iterasi dapat berupa range, list, set, map, string, atau objek apa pun yang mengimplementasikan operator iterator(). Pada chapter ini kita akan mengiterasi range, list, dan map, serta menggunakan indices, withIndex(), dan step untuk skenario iterasi yang lebih kompleks.
Iterasi Range dan List #
Bentuk paling sederhana for (i in 1..5) mengiterasi setiap angka dari 1 hingga 5 inklusif. Untuk list, kita dapat langsung mengiterasi elemennya tanpa perlu mengakses indeks.
fun main() {
// Iterasi range angka
println("Iterasi 1..5:")
for (i in 1..5) {
print("$i ")
}
println()
// Iterasi elemen list
val buah = listOf("Apel", "Mangga", "Jeruk", "Pisang")
println("Daftar buah:")
for (nama in buah) {
println("- $nama")
}
// Iterasi dengan indeks menggunakan indices
println("Dengan indeks:")
for (indeks in buah.indices) {
println("${indeks + 1}. ${buah[indeks]}")
}
// Iterasi dengan withIndex: mendapatkan (index, value)
println("Dengan withIndex:")
for ((indeks, nama) in buah.withIndex()) {
println("Posisi $indeks -> $nama")
}
// Iterasi entry map
val stok = mapOf("Apel" to 12, "Mangga" to 8, "Jeruk" to 15)
println("Stok buah:")
for ((nama, jumlah) in stok) {
println("$nama: $jumlah kg")
}
// Iterasi karakter string
val kata = "Kotlin"
print("Huruf kata '$kata': ")
for (ch in kata) {
print("$ch ")
}
println()
// Iterasi dengan step
println("Kelipatan 10 dari 0 sampai 50:")
for (n in 0..50 step 10) {
print("$n ")
}
println()
}Output yang Dihasilkan:
Iterasi 1..5:
1 2 3 4 5
Daftar buah:
- Apel
- Mangga
- Jeruk
- Pisang
Dengan indeks:
1. Apel
2. Mangga
3. Jeruk
4. Pisang
Dengan withIndex:
Posisi 0 -> Apel
Posisi 1 -> Mangga
Posisi 2 -> Jeruk
Posisi 3 -> Pisang
Stok buah:
Apel: 12 kg
Mangga: 8 kg
Jeruk: 15 kg
Huruf kata 'Kotlin': K o t l i n
Kelipatan 10 dari 0 sampai 50:
0 10 20 30 40 50Mari kita bedah baris-baris penting:
for (i in 1..5) print("$i "): range1..5menghasilkanIntRangeyang menyediakan iterator. Variabelimengambil setiap nilai secara berurutan.for (nama in buah) println("- $nama"): listList<String>dapat diiterasi langsung tanpa indeks. VariabelnamabertipeStringsesuai tipe elemen list.for (indeks in buah.indices): propertyindicesmengembalikanIntRangeberisi0..size-1. Cocok ketika kita perlu tahu posisi elemen.for ((indeks, nama) in buah.withIndex()):withIndex()membungkus setiap elemen menjadiIndexedValue<T>. Dengan destructuring declaration, kita mengikat indeks dan nilai sekaligus dalam satu iterasi.for ((nama, jumlah) in stok): iterasi padaMapmenghasilkanMap.Entry. Destructuring(k, v)mengambil key dan value sekaligus.for (ch in kata):Stringmenyediakan iterator karakter, sehingga kita dapat mengiterasi huruf demi huruf.for (n in 0..50 step 10): modifierstepmengubah kelipatan iterasi. Hasilnya melompat 0, 10, 20, …, 50.
indices vs withIndex() #
Kedua pendekatan sama-sama memberi akses ke indeks, tetapi withIndex() lebih ringkas karena kita mendapatkan indeks dan nilai dalam satu deklarasi. indices lebih cocok ketika kita ingin kontrol penuh atas akses list melalui indeks.
| Pendekatan | Sintaks | Cocok untuk |
|---|---|---|
| Iterasi langsung | for (x in list) | tidak perlu indeks |
indices | for (i in list.indices) | perlu indeks, akses manual |
withIndex() | for ((i, x) in list.withIndex()) | butuh indeks dan nilai sekaligus |
Iterasi Map dengan Destructuring #
Iterasi Map di Kotlin menghasilkan Map.Entry yang dapat didestrukturisasi menjadi (kunci, nilai). Bentuk ini lebih ringkas dibanding memanggil entry.key dan entry.value secara terpisah.
Iterasi dengan step #
Modifier step bekerja pada IntProgression, LongProgression, dan CharProgression. Untuk iterasi menurun, gunakan downTo (mis. for (i in 10 downTo 1 step 2)). Detail range dan progression akan kita bedah tuntas pada chapter ranges-dan-progressions.
Referensi Lanjutan #
- Control flow
— panduan resmi
forloop dengan iterator di Kotlin
Dengan for yang konsisten untuk berbagai sumber iterasi, kode Kotlin menjadi lebih ringkas dan mudah dipindai. Chapter berikutnya membahas while untuk kasus ketika jumlah iterasi tidak diketahui sejak awal.