Диапазоны и прогрессии
Диапазоны и прогрессии определяют последовательности значений в Kotlin и поддерживают операторы диапазонов, итерацию, пользовательские значения шага и арифметические прогрессии.
Диапазоны
В Kotlin можно легко создавать диапазоны значений с помощью функций .rangeTo() и .rangeUntil() из пакета kotlin.ranges.
Диапазон представляет собой упорядоченный набор значений с заданными началом и концом. По умолчанию на каждом шаге значение увеличивается на 1. Например, 1..4 представляет числа 1, 2, 3 и 4.
Чтобы создать:
диапазон с включёнными границами, вызовите функцию
.rangeTo()с оператором... В такой диапазон входят и начальное, и конечное значения.диапазон с исключённой верхней границей, вызовите функцию
.rangeUntil()с оператором..<. В такой диапазон входит начальное значение, но не конечное.
Например:
fun main() {
//sampleStart
// Closed-ended range: includes both 1 and 4
println(4 in 1..4)
// true
// Open-ended range: includes 1, excludes 4
println(4 in 1..<4)
// false
//sampleEnd
}
Диапазоны особенно полезны для итерации в циклах for:
fun main() {
//sampleStart
for (i in 1..4) print(i)
// 1234
//sampleEnd
}
Чтобы перебирать числа в обратном порядке, используйте функцию downTo вместо ...
fun main() {
//sampleStart
for (i in 4 downTo 1) print(i)
// 4321
//sampleEnd
}
Также можно перебирать числа с пользовательским шагом с помощью функции step() вместо шага по умолчанию, равного 1:
fun main() {
//sampleStart
for (i in 0..8 step 2) print(i)
println()
// 02468
for (i in 0..<8 step 2) print(i)
println()
// 0246
for (i in 8 downTo 0 step 2) print(i)
// 86420
//sampleEnd
}
Прогрессии
Диапазоны целочисленных типов, таких как Int, Long и Char, можно рассматривать как арифметические прогрессии. В Kotlin такие прогрессии представлены специальными типами: IntProgression, LongProgression и CharProgression.
У прогрессий есть три основных свойства: элемент first, элемент last и ненулевой step. Первый элемент — это first, каждый последующий элемент равен предыдущему элементу плюс step. Итерация по прогрессии с положительным шагом эквивалентна циклу for с индексом в Java/JavaScript.
for (int i = first; i <= last; i += step) {
// ...
}
Если прогрессия неявно создаётся при переборе диапазона, элементы first и last этой прогрессии совпадают с границами диапазона, а step равен 1.
fun main() {
//sampleStart
for (i in 1..10) print(i)
// 12345678910
//sampleEnd
}
Чтобы задать пользовательский шаг прогрессии, используйте функцию step для диапазона.
fun main() {
//sampleStart
for (i in 1..8 step 2) print(i)
// 1357
//sampleEnd
}
Элемент last прогрессии вычисляется следующим образом:
Для положительного шага: максимальное значение, не превышающее конечное значение, такое, что
(last - first) % step == 0.Для отрицательного шага: минимальное значение, не меньшее конечного значения, такое, что
(last - first) % step == 0.
Таким образом, элемент last не всегда совпадает с заданным конечным значением.
fun main() {
//sampleStart
for (i in 1..9 step 3) print(i) // the last element is 7
// 147
//sampleEnd
}
Прогрессии реализуют Iterable<N>, где N — это Int, Long или Char соответственно, поэтому их можно использовать в различных функциях коллекций, таких как map, filter и других.
fun main() {
//sampleStart
println((1..10).filter { it % 2 == 0 })
// [2, 4, 6, 8, 10]
//sampleEnd
}
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/ranges.html