Перейти к основному содержимому
Версия: Legacy

Интервалы в Kotlin



Основная концепция

Интервалы позволяют создавать последовательности значений от начальной до конечной точки. Широко используются в циклах и проверках условий.




Создание интервалов

Базовый оператор ..

Примеры
val numbers = 1..5 // 1,2,3,4,5
val letters = 'a'..'d' // a,b,c,d
val reversed = 5.downTo(1) // 5,4,3,2,1

Исключающий диапазон until

Край не включается
val days = 1 until 7 // 1,2,3,4,5,6 (7 не входит)

Специальные операторы

Комбинирование модификаторов
val steps = 10 downTo 0 step 2 // 10,8,6,4,2,0
val chars = 'z' downTo 'a' step 3 // z,w,t,q...



Проверка вхождения

Операторы in/!in
val age = 25
println(age in 18..30) // true
println(age !in 0..17) // true

val symbol = 'W'
println(symbol in 'A'..'Z') // true (проверка заглавных букв)



Использование в циклах

Классический for с шагом

Перебор с шагом 3
for (i in 0..20 step 3) {
print("$i ") // 0 3 6 9 12 15 18
}

Обратный отсчёт

Пример с downTo
for (num in 5 downTo 1) {
print("$num ") // 5 4 3 2 1
}

Фильтрация символов

Работа с Char диапазонами
for (letter in 'а'..'е') {
print("$letter ") // а б в г д е
}



Продвинутые сценарии

Генерация коллекций

Создание списка из диапазона
val squares = (1..5).map { it * it } // [1, 4, 9, 16, 25]

Проверка пересечения

Пример с диапазонами
val range1 = 10..20
val range2 = 15..25
println(range1.intersect(range2)) // 15..20

Бесконечные последовательности

С generateSequence
val infiniteRange = generateSequence(1) { it + 5 }
infiniteRange.take(5).forEach { print("$it ") } // 1 6 11 16 21



Важные нюансы
  1. Только для Comparable типов: Int, Long, Char, DateTime и др.
  2. Эксклюзивные диапазоны: используйте until вместо .. там, где нужно исключить верхнюю границу
  3. Производительность: диапазоны с step создают промежуточные коллекции
  4. Ошибки при обратном шаге:
// Неправильно:
(1..5 step -1) // Вызовет исключение!
// Правильно:
(5 downTo 1 step 1)