Kotlin Academy · Урок

forEach, repeat и forEachIndexed

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

Урок 3 из 413 шагов

«forEach, repeat и forEachIndexed» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Функциональный перебор

Помимо for, Kotlin предлагает перебор с функциями высшего порядка: forEach, forEachIndexed и repeat. Они делают небольшие циклы более выразительными.

Основы forEach

forEach принимает лямбду и выполняет её для каждого элемента. Элемент неявно получает имя it.

fun main() {
    val items = listOf("a", "b", "c")
    items.forEach { println(it) }
}

forEach с именованным параметром

Задайте параметру лямбды более понятное имя, если it выглядит неудачно.

fun main() {
    val users = listOf("Alice", "Bob", "Charlie")
    users.forEach { name ->
        println("Hello, $name!")
    }
}

repeat для фиксированного числа итераций

repeat(n) выполняет свой блок ровно n раз. Лямбда получает индекс итерации, начиная с 0.

fun main() {
    repeat(5) {
        println("Iteration $it")
    }
}

repeat для побочных эффектов

Используйте repeat для простых действий, которые нужно выполнить n раз: вывода разделителя, повторной попытки вызова и тому подобного.

fun main() {
    repeat(3) { println("-".repeat(20)) }
}

forEachIndexed

forEachIndexed передаёт лямбде и индекс, и элемент.

fun main() {
    val words = listOf("Hello", "Kotlin", "World")
    words.forEachIndexed { index, word ->
        println("$index: $word")
    }
}

forEach и for

forEach записывается короче, но не поддерживает break и continue. Если нужно завершить перебор досрочно, используйте обычный for.

fun main() {
    val nums = listOf(1, 2, 3, 4, 5)
    // forEach: runs to completion
    nums.forEach { print("$it ") }
    println()
    // for: can break
    for (n in nums) {
        if (n == 3) break
        print("$n ")
    }
    println()
}

Возврат из forEach

В forEach можно имитировать continue с помощью помеченного return@forEach.

fun main() {
    listOf(1, 2, 3, 4).forEach {
        if (it % 2 == 0) return@forEach // skip
        println("odd: $it")
    }
}

forEach для отображения

forEach для отображения передаёт каждую запись Map.Entry как it; для удобства чтения разберите её на компоненты.

fun main() {
    val scores = mapOf("Alice" to 9, "Bob" to 7)
    scores.forEach { (name, score) ->
        println("$name -> $score")
    }
}

Объединение repeat с другими вызовами

repeat возвращает Unit, поэтому функционально объединить его с другими вызовами нельзя. Используйте его только для побочных эффектов.

fun main() {
    var sum = 0
    repeat(10) { sum += it }
    println("Sum 0..9 = $sum") // 45
}

Замечание о производительности

В плотных циклах по большим коллекциям обычный for немного быстрее, поскольку не создаёт лямбду. Однако для ясности кода предпочитайте forEach.

fun main() {
    val n = 1_000_000
    var sum = 0L
    for (i in 1..n) sum += i
    println(sum)
}

Быстрая проверка

Какая конструкция передаёт своей лямбде и индекс, и элемент?

Итоги

forEach: лямбда для каждого элемента. forEachIndexed: индекс и элемент. repeat(n): цикл с фиксированным числом повторений. Ни одна из них не поддерживает обычный break — для досрочного выхода используйте for.

Можно начать бесплатно

Изучай Kotlin с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
51
Уроки
203

Часто задаваемые вопросы

Урок «forEach, repeat и forEachIndexed» бесплатный?

Да — полный текст урока «forEach, repeat и forEachIndexed» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «forEach, repeat и forEachIndexed»?

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

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «forEach, repeat и forEachIndexed»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Цикл for по диапазонам и коллекциям
  2. while и do-while: когда что использовать
  3. forEach, repeat и forEachIndexed
  4. break, continue и возвраты с метками
← Назад к Kotlin Academy