Range adalah konstruksi yang merepresentasikan deret nilai di antara dua batas. Kotlin menyediakan operator .. untuk membuat range inklusif, downTo untuk urutan menurun, until untuk batas atas eksklusif, dan step untuk mengatur lompatan. Di balik layar, sebagian besar range adalah Progression — objek yang menyimpan nilai awal, nilai akhir, dan langkah. Pada chapter ini kita akan membentuk berbagai jenis range, memeriksa keanggotaan dengan in dan !in, serta melihat tipe-tipe seperti IntRange, CharRange, dan LongRange.
Range Naik, Turun, dan Eksklusif #
Operator .. membuat range naik yang inklusif di kedua ujung. downTo menghasilkan range menurun, sementara until membuat range yang batas atasnya tidak ikut termasuk.
fun main() {
// Range naik: 1..10 inklusif di kedua ujung
println("Range 1..10:")
for (i in 1..10) print("$i ")
println()
// Range turun: downTo
println("Range 10 downTo 1:")
for (i in 10 downTo 1) print("$i ")
println()
// until: batas atas eksklusif
println("Range 1 until 5 (batas atas eksklusif):")
for (i in 1 until 5) print("$i ")
println()
// step: lompatan
println("Range 0..20 step 4:")
for (i in 0..20 step 4) print("$i ")
println()
println("Range 20 downTo 0 step 5:")
for (i in 20 downTo 0 step 5) print("$i ")
println()
// CharRange
println("CharRange 'a'..'e':")
for (ch in 'a'..'e') print("$ch ")
println()
// LongRange
println("LongRange 1_000L..1_003L:")
for (n in 1_000L..1_003L) print("$n ")
println()
// Mengecek keanggotaan elemen pada range
val rentang = 1..100
println("50 in 1..100? ${50 in rentang}")
println("150 in 1..100? ${150 in rentang}")
println("0 !in 1..100? ${0 !in rentang}")
// Tipe-tipe progression yang dihasilkan
val a: IntRange = 1..10
val b: IntProgression = 1..10 step 2
val c: CharRange = 'a'..'z'
val d: LongRange = 1L..1_000L
println("IntRange: $a, first=${a.first}, last=${a.last}")
println("IntProgression step 2: $b, first=${b.first}, last=${b.last}, step=${b.step}")
println("CharRange: $c, first=${c.first}, last=${c.last}")
println("LongRange: $d, first=${d.first}, last=${d.last}")
}Output yang Dihasilkan:
Range 1..10:
1 2 3 4 5 6 7 8 9 10
Range 10 downTo 1:
10 9 8 7 6 5 4 3 2 1
Range 1 until 5 (batas atas eksklusif):
1 2 3 4
Range 0..20 step 4:
0 4 8 12 16 20
Range 20 downTo 0 step 5:
20 15 10 5 0
CharRange 'a'..'e':
a b c d e
LongRange 1_000L..1_003L:
1000 1001 1002 1003
50 in 1..100? true
150 in 1..100? false
0 !in 1..100? true
IntRange: 1..10, first=1, last=10
IntProgression step 2: 1..9 step 2, first=1, last=9, step=2
CharRange: a..z, first=a, last=z
LongRange: 1..1000, first=1, last=1000Mari kita bedah baris-baris penting:
1..10: range inklusif. Mencakup 1, 2, 3, …, 10. Kedua batas ikut serta.10 downTo 1: range menurun dari 10 sampai 1. OperatordownToadalah fungsi infix yang mengembalikanIntProgressiondengan step-1.1 until 5: range 1 sampai 4 (5 tidak termasuk).untilberguna untuk iterasi berbasis indeks yang tidak boleh menyentuh panjang list.0..20 step 4: lompatan 4, menghasilkan 0, 4, 8, …, 20.stepmengubah propertisteppadaIntProgression.'a'..'e':CharRangebekerja pada karakter. Berguna untuk iterasi alfabet atau pengecekan rentang huruf.1_000L..1_003L:LongRangeuntuk angka besar. Tipe literalLwajib untukLong.50 in rentang: operatorinmemanggilcontains(rentang, 50). Operator!inadalah negasinya.val b: IntProgression = 1..10 step 2: walau berasal dariIntRange, penggunaanstepmengubahnya menjadiIntProgressionmurni (bukanIntRange). Propertifirst,last, dansteptersedia pada semua progression.
Operator .., until, downTo, step #
| Operator | Sintaks | Batas atas | Arah |
|---|---|---|---|
.. | a..b | Inklusif | Naik |
until | a until b | Eksklusif | Naik |
downTo | a downTo b | Inklusif | Turun |
step | a..b step n | Sesuai rentang awal | Mengikuti rentang |
IntRange vs IntProgression #
IntRange adalah IntProgression dengan step = 1. Setiap IntRange juga merupakan IntProgression, tetapi kebalikannya tidak selalu benar: 1..10 step 2 adalah IntProgression tanpa menjadi IntRange. Properti first dan last tetap tersedia pada keduanya.
Tipe Range Utama #
| Tipe | Contoh | Penggunaan |
|---|---|---|
IntRange | 1..100 | skor, jam, indeks |
LongRange | 1L..1_000L | id besar, ukuran |
CharRange | 'a'..'z' | alfabet |
IntProgression | 1..10 step 2 | lompatan |
LongProgression | 10L downTo 0L step 5L | lompatan pada Long |
Keanggotaan dengan in dan !in #
Range sangat cocok dipakai bersama when dan in untuk klasifikasi nilai numerik. Kita telah membahasnya pada chapter when-dengan-range. Pola yang sama berlaku untuk validasi: cek apakah usia in 17..65, kodePos in 10000..99999, atau huruf in 'A'..'Z'.
Referensi Lanjutan #
- Ranges
— panduan resmi range dan progression
IntProgression
Range dan progression menjadi pondasi banyak konstruksi iterasi di Kotlin. Chapter berikutnya akan membahas break dan continue — dua keyword yang mengatur alur keluar dan pelompatan iterasi di dalam loop.