0Pricing
Kotlin Academy · Урок

Передача лямбд функциям

Передавайте лямбды как аргументы и используйте синтаксис завершающей лямбды.

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

Функции, принимающие лямбды

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

Объявление функции высшего порядка

Используйте тип функции в качестве типа параметра.
fun applyTwice(n: Int, op: (Int) -> Int): Int {
    return op(op(n))
}
println(applyTwice(3, { it * 2 }))  // 12

Синтаксис лямбды в конце

Если последний параметр является функцией, лямбду можно вынести за скобки. Это синтаксис «лямбды в конце».
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))

// Standard:
applyTwice(3, { it * 2 })
// Trailing lambda:
applyTwice(3) { it * 2 }

Лямбда без скобок

Если лямбда — аргумент ONLY, скобки можно полностью опустить.
fun execute(block: () -> Unit) = block()

// With parens:
execute({ println("Hello") })
// Without parens (idiomatic):
execute { println("Hello") }

Передача переменной-лямбды

Сохранённую ссылку на лямбду можно передать, используя имя её переменной.
val double = { n: Int -> n * 2 }
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(5, double))  // 20

Ссылки на функции с помощью ::

Используйте ::, чтобы передать именованную функцию в качестве аргумента, совместимого с лямбдой.
fun triple(n: Int) = n * 3
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(2, ::triple))  // 18

Несколько параметров-лямбд

Функция может принимать несколько параметров-лямбд. Только для последнего из них можно использовать синтаксис замыкающей лямбды.
fun transform(
    value: Int,
    before: (Int) -> Int,
    after: (Int) -> Int
) = after(before(value))

println(transform(5, { it * 2 }, { it + 1 }))  // 11

Передача лямбды в функцию фильтрации

Функция фильтрации принимает лямбду-предикат — функцию, возвращающую логическое значение для элемента.
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)  // [2, 4, 6]

Цепочки функций высшего порядка

Объединяйте вызовы нескольких функций высшего порядка в цепочку, чтобы создавать выразительные конвейеры обработки данных.
val result = (1..10)
    .filter { it % 2 != 0 }  // odds
    .map { it * it }          // square
    .take(3)                  // first 3
println(result)  // [1, 9, 25]

Захват переменных лямбдой

Лямбды могут захватывать переменные из окружающей области видимости (замыкание). В Kotlin они даже могут захватывать и изменять переменную var.
var total = 0
listOf(1, 2, 3, 4).forEach { total += it }
println(total)  // 10

Возврат лямбды из функции

Функции высшего порядка также могут возвращать лямбды, создавая функции-фабрики.
fun multiplierOf(factor: Int): (Int) -> Int {
    return { n -> n * factor }
}
val double = multiplierOf(2)
val triple = multiplierOf(3)
println(double(5))  // 10
println(triple(5))  // 15

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

Когда можно вынести лямбду за скобки, используя синтаксис замыкающей лямбды?

Итоги

Функции высшего порядка принимают лямбды в качестве параметров. Синтаксис замыкающей лямбды выносит лямбду за скобки, если она является последним параметром. :: передаёт ссылки на именованные функции. Далее: неявный параметр 'it'!

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

Урок «Передача лямбд функциям» бесплатный?

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

Чему я научусь в уроке «Передача лямбд функциям»?

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

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

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

Сколько времени занимает урок «Передача лямбд функциям»?

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

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

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

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

  1. Что такое лямбда? Синтаксис и типы
  2. Передача лямбд функциям
  3. it: неявный параметр
  4. filter, map и find для коллекций
← Назад к Kotlin Academy