Лямбды и функции высшего порядка
Передавайте поведение как значения.
«Лямбды и функции высшего порядка» — бесплатный урок Android Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
Что такое лямбда
Лямбда — это небольшая функция, которую можно записать непосредственно в коде, не присваивая ей имя.
Её заключают в фигурные скобки: { x -> x + 1 }. Лямбды позволяют передавать поведение подобно данным.
Вы уже использовали их с map и filter.
Сохранение лямбды в переменной
Лямбда является значением, поэтому её можно сохранить в переменной и вызвать позже.
Вызывайте её как функцию, используя круглые скобки.
fun main() {
val square = { x: Int -> x * x }
println(square(5))
println(square(3))
}Сокращение it
Если лямбда принимает ровно один параметр, его имя можно опустить и использовать it.
Так короткие лямбды остаются компактными и понятными.
fun main() {
val nums = listOf(1, 2, 3, 4)
val big = nums.filter { it > 2 }
println(big)
}Несколько параметров
Лямбда может принимать несколько параметров, разделённых запятыми перед стрелкой.
Последнее выражение в лямбде является её возвращаемым значением.
fun main() {
val add = { a: Int, b: Int -> a + b }
println(add(4, 6))
}Функции высшего порядка
Функция высшего порядка — это функция, которая принимает другую функцию в качестве параметра или возвращает функцию.
Тип функции (Int) -> Int означает «принимает Int и возвращает Int». Именно так работают map и filter.
Написание функции высшего порядка
Здесь мы определяем applyTwice, которая принимает функцию и выполняет её два раза.
Параметр op имеет тип (Int) -> Int.
fun applyTwice(x: Int, op: (Int) -> Int): Int {
return op(op(x))
}
fun main() {
println(applyTwice(3) { it + 1 })
}Синтаксис лямбды в конце
Если лямбда является последним аргументом, её можно вынести за круглые скобки.
Поэтому list.filter { ... } выглядит так лаконично. Обе приведённые ниже формы равнозначны.
fun main() {
val nums = listOf(1, 2, 3)
println(nums.map({ it * 2 }))
println(nums.map { it * 2 })
}Передача именованных функций
Существующую именованную функцию можно передать туда, где ожидается лямбда, используя ::. Это называется ссылкой на функцию.
Так не приходится заново записывать логику в виде лямбды.
fun isOdd(n: Int) = n % 2 == 1
fun main() {
val nums = listOf(1, 2, 3, 4)
println(nums.filter(::isOdd))
}Возврат функции
Функция высшего порядка также может возвращать функцию. Здесь multiplier создаёт настраиваемую лямбду для умножения.
Это простой способ задать конфигурацию.
fun multiplier(factor: Int): (Int) -> Int {
return { it * factor }
}
fun main() {
val triple = multiplier(3)
println(triple(5))
}Лямбды захватывают переменные
Лямбда может читать переменные из окружающей области видимости. Это называется замыканием.
Здесь лямбда запоминает bonus, даже после передачи в другое место.
fun main() {
val bonus = 10
val nums = listOf(1, 2, 3)
println(nums.map { it + bonus })
}Зачем нужны лямбды в Android
В Android лямбды позволяют удобно описывать обратные вызовы. Обработчик нажатия кнопки — это всего лишь лямбда, которую Вы передаёте платформе.
Например, button.setOnClickListener { showMenu() } выполняет Ваш код при нажатии.
Быстрая проверка
Проверьте, насколько хорошо Вы понимаете лямбды и функции высшего порядка.
Итоги
Лямбды — это безымянные функции, записанные в фигурных скобках; для единственного параметра используется it.
Функции высшего порядка принимают функции или возвращают их, обеспечивая удобные обратные вызовы и повторно используемые операции, такие как map и filter.
Изучай Kotlin с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 36
- Уроки
- 152
Часто задаваемые вопросы
Урок «Лямбды и функции высшего порядка» бесплатный?
Да — полный текст урока «Лямбды и функции высшего порядка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Лямбды и функции высшего порядка»?
Передавайте поведение как значения. Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Лямбды и функции высшего порядка»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Списки и изменяемые списки
- Отображения и множества
- map, filter, forEach
- Лямбды и функции высшего порядка