Ce face Int.until
0 until 5 înseamnă 0, 1, 2, 3, 4: capătul de sus este exclus. Este potrivit pentru indici: for (i in 0 until lista.size). Din Kotlin 1.9 aceeași formă se scrie și 0..<5. Spre comparație, 0..5 include și 5.
10 downTo 1 numără descrescător, de la 10 la 1, ambele incluse. step schimbă pasul: 0..20 step 5 dă 0, 5, 10, 15, 20, iar 10 downTo 0 step 3 dă 10, 7, 4, 1. Pasul trebuie să fie pozitiv, chiar și cu downTo.
Toate sunt funcții infix, deci se scriu între numere, fără punct și paranteze. Rezultatul poate fi folosit în for sau transformat cu toList(), map, sum.
Parametri
| Parametru | Descriere |
|---|---|
to |
Capătul șirului (exclus la until, inclus la downTo). |
step |
Pasul, un număr pozitiv. |
Ce returnează
Un IntRange sau IntProgression.
Exemple
Exemplul 1: until, downTo și step
toList() arată ce numere conține fiecare șir.
fun main() {
println((0 until 5).toList())
println((0..<5).toList())
println((5 downTo 1).toList())
println((0..20 step 5).toList())
println((10 downTo 0 step 3).toList())
}
Rezultat
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[5, 4, 3, 2, 1]
[0, 5, 10, 15, 20]
[10, 7, 4, 1]
Exemplul 2: Indici pentru o listă
until lista.size nu iese niciodată din listă.
fun main() {
val orase = listOf("Iași", "Cluj", "Sibiu")
for (i in 0 until orase.size) {
println("$i: ${orase[i]}")
}
}
Rezultat
0: Iași
1: Cluj
2: Sibiu
Exemplul 3: Numere pare în ordine inversă
Combinăm downTo cu step 2 și calculăm suma.
fun main() {
val pare = 20 downTo 2 step 2
println(pare.joinToString(" "))
println("Suma: ${pare.sum()}")
}
Rezultat
20 18 16 14 12 10 8 6 4 2
Suma: 110
Greșeli frecvente
- Scrii
for (i in 10..1)și bucla nu rulează deloc:..numără doar crescător. Folosește10 downTo 1. - Folosești
0..lista.sizepentru indici și ultimul pas aruncăIndexOutOfBoundsException. Foloseșteuntilsaulista.indices. - Scrii
10 downTo 0 step -2. Pasul trebuie să fie pozitiv; direcția o dădownTo.
Comenzi înrudite
IntRange.contains: Lucrul cu un interval a..b: in verifică apartenența, first și last dau capetele, reversed îl inversează.Range-uri (.., ..<, until, downTo, step): Intervale de numere sau caractere: .. include capătul, ..< și until îl exclud, downTo numără invers, step sare.for: Parcurge pe rând elementele unei colecții, ale unui interval sau ale oricărui obiect care are iterator().repeat: Rulează un bloc de cod de un anumit număr de ori; în bloc, it este numărul repetării, de la 0.