← Назад к вопросам

Что такое IntRange в Kotlin?

2.0 Middle🔥 202 комментариев
#Kotlin основы

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое IntRange в Kotlin?

IntRange — это один из встроенных типов диапазонов (ranges) в Kotlin, предназначенный для представления последовательности целых чисел от начального значения до конечного включительно. Он реализует интерфейс ClosedRange<Int> и является частью системы типов Kotlin для работы с интервалами значений.

Основные характеристики IntRange

  1. Инклюзивность — диапазон включает и начальное, и конечное значение.
  2. ПоследовательностьIntRange реализует интерфейс Iterable<Int>, что позволяет использовать его в циклах и функциях обработки коллекций.
  3. Иммутабельность — как и большинство базовых типов в Kotlin, IntRange является неизменяемым (immutable).

Создание IntRange

Самый распространённый способ создания — использование оператора .. (две точки):

val range: IntRange = 1..10 // Диапазон от 1 до 10 включительно

Также можно использовать конструктор явно:

val explicitRange = IntRange(start = 1, endInclusive = 10)

Ключевые свойства и методы

  • first — начальное значение диапазона.
  • last — конечное значение.
  • step — шаг итерации (по умолчанию равен 1).
  • isEmpty() — проверяет, пуст ли диапазон (например, 5..1 без модификатора downTo).
  • contains(value) или оператор in — проверяет, содержится ли число в диапазоне.
val sampleRange = 5..15
println(sampleRange.first) // 5
println(sampleRange.last)  // 15
println(7 in sampleRange)  // true
println(20 in sampleRange) // false

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

IntRange идеально подходит для итераций:

for (i in 1..5) {
    println(i) // Выведет 1, 2, 3, 4, 5
}

Специальные функции и модификаторы

  1. downTo — создаёт убывающий диапазон:

    for (i in 10 downTo 1) {
        println(i) // 10, 9, ..., 1
    }
    
  2. step — задаёт шаг итерации:

    for (i in 1..10 step 2) {
        println(i) // 1, 3, 5, 7, 9
    }
    
  3. until — создаёт диапазон, исключающий последний элемент:

    for (i in 1 until 10) {
        println(i) // 1, 2, ..., 9
    }
    

Практическое применение в Android-разработке

  1. Обработка индексов коллекций:

    val list = listOf("A", "B", "C", "D")
    for (index in 0..list.lastIndex) {
        println(list[index])
    }
    
  2. Валидация ввода:

    fun validateAge(age: Int): Boolean {
        return age in 0..150
    }
    
  3. Создание последовательностей данных:

    val indices = (0..100).filter { it % 3 == 0 }
    
  4. Анимации и прогресс:

    val progressRange = 0..100
    val currentProgress = 42
    require(currentProgress in progressRange) {
        "Прогресс должен быть в диапазоне $progressRange"
    }
    

Особенности производительности

IntRangeлегковесная структура, хранящая только начальное и конечное значение. При итерациях генерируются числа "на лету", без создания полного списка в памяти. Это делает диапазоны эффективными даже для больших интервалов:

// Не создаёт список из миллиона элементов
for (i in 1..1_000_000) {
    // Обработка
}

Сравнение с другими типами диапазонов

Kotlin также предоставляет другие типы диапазонов:

  • LongRange — для Long значений.
  • CharRange — для символов.
  • ClosedRange<T> — обобщённый интерфейс.

Важные нюансы

  • Пустые диапазоны5..1 является пустым при итерации, но (5..1).isEmpty() вернёт true.
  • Оптимизация компилятора — в некоторых случаях Kotlin компилятор преобразует циклы с диапазонами в более эффективный байт-код.
  • Совместимость с JavaIntRange компилируется в специальный тип, который в Java можно использовать через методы расширения Kotlin стандартной библиотеки.

IntRange — это мощный, выразительный и производительный инструмент, который существенно упрощает работу с последовательностями целых чисел, делая код более читаемым и менее подверженным ошибкам по сравнению с традиционными циклами for с счётчиками.

Что такое IntRange в Kotlin? | PrepBro