Android Academy · Урок

Лямбды и функции высшего порядка

Передавайте поведение как значения.

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

«Лямбды и функции высшего порядка» — бесплатный урок 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 — локальная установка не требуется.

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

  1. Списки и изменяемые списки
  2. Отображения и множества
  3. map, filter, forEach
  4. Лямбды и функции высшего порядка
← Назад к Android Academy