forEach, repeat и forEachIndexed
Изучите вспомогательные средства итерации в функциональном стиле и узнайте, когда они лучше классических циклов.
«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 — локальная установка не требуется.
Все уроки этого курса
- Цикл for по диапазонам и коллекциям
- while и do-while: когда что использовать
- forEach, repeat и forEachIndexed
- break, continue и возвраты с метками