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

Как написать цикл в Kotlin

1.0 Junior🔥 301 комментариев
#Kotlin основы

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

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

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

Отличный вопрос! Kotlin предлагает несколько способов написания циклов, каждый из которых предназначен для различных сценариев. Как опытный разработчик, я всегда выбираю цикл, наиболее точно соответствующий задаче и согласующийся с философией Kotlin — безопасность, выразительность и функциональный подход.

Основные типы циклов в Kotlin:

1. Цикл for

Это самый распространённый цикл для перебора коллекций или диапазонов.

Перебор диапазона (Range)

// От 1 до 5 включительно
for (i in 1..5) {
    println(i) // Выведет: 1, 2, 3, 4, 5
}

// От 1 до 4 (до 5 исключительно)
for (i in 1 until 5) {
    println(i) // Выведет: 1, 2, 3, 4
}

// С шагом
for (i in 1..10 step 2) {
    println(i) // Выведет: 1, 3, 5, 7, 9
}

// В обратном порядке
for (i in 5 downTo 1) {
    println(i) // Выведет: 5, µ4, 3, 2, 1
}

Перебор коллекций (массивов, списков, множеств)

val list = listOf("A", "B", "C")

// Перебор элементов
for (item in list) {
    println(item)
}

// Перебор с индексом (используя свойство .indices)
for (index in list.indices) {
    println("Индекс $index: ${list[index]}")
}

// Перебор с индексом и значением (используя метод .withIndex())
for ((index, value) in list.withIndex()) {
    println("Индекс $index: $value")
}

Перебор карт (Map)

val map = mapOf(1 to "One", 2 to "Two")

for ((key, value) in map) {
    println("Ключ $key: $value")
}

2. Цикл while

Это классический цикл с предусловием, который выполняется до тех пор, пока условие истинно.

var counter = 5

while (counter > 0) {
    println(counter)
    counter--
}

3. Цикл do-while

Это цикл с постусловием, который сначала выполняет тело цикла, а затем проверяет условие. Гарантирует хотя бы одно выполнение.

var input: String

do {
    print("Введите 'exit' для завершения: ")
    input = readlnOrNull() ?: ""
} while (input != "exit")

4. Функциональные подходы и итераторы

В Kotlin часто вместо классических циклов используют функции высшего порядка, что более соответствует его функциональной стороне.

val numbers = listOf(1, 2, 3, 4, 5)

// Вместо цикла for для трансформации:
val doubled = numbers.map { it * 2 }

// Вместо цикла for для фильтрации:
val even = numbers.filter { it % 2 == 0 }

// Вместо цикла for для выполнения действия на каждом элементе:
numbers.forEach { println(it) }

// Использование итератора напрямую:
val iterator = numbers.iterator()
while (iterator.hasNext()) {
    println(iterator.next())
}

Ключевые рекомендации по выбору:

  • Используйте for для простого перебора известных коллекций и диапазонов.
  • Используйте while когда количество итераций заранее неизвестно и зависит от динамического условия.
  • Используйте do-while когда необходимо гарантировать выполнение первой итерации (например, ввод пользователя).
  • Старайтесь заменять циклы for на forEach или другие функции коллекций (map, filter), когда требуется трансформация или фильтрация данных. Это делает код более декларативным и часто безопасным.
  • Для сложных условий или необходимости полного контроля над процессом итерации используйте явный iterator.

Важное отличие Kotlin от Java: в Kotlin нет традиционного цикла for с тремя частями (for (int i = 0; i < n; i++)). Для таких случаев используются диапазоны (.., until) с модификаторами step и downTo, что делает код более читаемым и безопасным (меньше шансов ошибиться в индексах).

Пример замены Java-стиля:

// Java: for (int i = 0; i < array.length; i++)
// Kotlin:
for (i in 0 until array.size) {
    // ...
}

Таким образом, Kotlin предоставляет богатый набор инструментов для итерации, сочетающий классические подходы с современными функциональными парадигмами.

Как написать цикл в Kotlin | PrepBro