← Назад к вопросам

Что такое лямбда функция в Kotlin?

1.0 Junior🔥 291 комментариев
#Kotlin основы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое лямбда функция в Kotlin?

Лямбда функция в Kotlin — это краткий способ объявления функции без имени (анонимной функции), который может быть передана как аргумент или сохранена в переменной. Она является фундаментальной частью поддержки функционального программирования в языке и часто используется для создания чистого, декларативного и выразительного кода.

Основные характеристики лямбда функций

  • Анонимность: Лямбда не имеет явного имени, но может быть присвоена переменной или передана напрямую.
  • Сокращенный синтаксис: Объявление значительно компактнее, чем объявление обычной функции.
  • Возможность передачи: Лямбды могут быть переданы в функции высшего порядка (higher-order functions) как аргументы.
  • Замыкания (Closures): Лямбды могут захватывать и использовать переменные из окружающего контекста (области видимости, в которой они объявлены).

Синтаксис и примеры

Базовый синтаксис лямбды выглядит следующим образом:

{ x: Int, y: Int -> x + y }

Это лямбда, принимающая два аргумента типа Int и возвращающая их сумму. Части:

  1. Аргументы (и их типы) указаны перед стрелкой ->.
  2. Тело лямбды — выражение после стрелки.

Пример 1: Присвоение лямбды переменной

val sum: (Int, Int) -> Int = { a, b -> a + b }
println(sum(5, 3)) // Вывод: 8

Здесь тип переменной sum явно указан как функциональный тип (Int, Int) -> Int.

Пример 2: Передача лямбды как аргумента функции высшего порядка Это наиболее распространенный случай использования.

val numbers = listOf(1, 2, 3, 4, 5)

// Лямбда, определяющая условие фильтрации
val evenNumbers = numbers.filter { number -> number % 2 == 0 }
println(evenNumbers) // Вывод: [2, 4]

// Использование синтаксиса с `it` для единственного аргумента
val squared = numbers.map { it * it }
println(squared) // Вывод: [1, 4, 9, 16, 25]

Функции filter и map являются функциями высшего порядка — они принимают лямбду ({ number -> number % 2 == 0 } и { it * it }) как параметр.

Пример 3: Лямбда с захватом контекста (замыкание)

var multiplier = 2
val multiplyBy: (Int) -> Int = { value -> value * multiplier }

println(multiplyBy(5)) // Вывод: 10
multiplier = 3
println(multiplyBy(5)) // Вывод: 15

Лямбда multiplyBy захватывает внешнюю переменную multiplier и использует её текущее значение при каждом вызове.

Особенности и важные детали

  • Функциональный тип: Тип лямбды описывается как (Параметры) -> ВозвращаемыйТип. Например, () -> Unit для лямбды без аргументов, ничего не возвращающей.
  • Синтаксис it: Если лямбда имеет только один параметр, его имя можно опустить и использовать сокращенное обозначение it.
  • Последний лямбда-аргумент: Если лямбда является последним аргументом функции, её можно вынести за круглые скобки. Если она единственный аргумент — круглые скобки можно опустить совсем (как в примерах с filter и map).
  • Явный возврат: В отличие от обычных функций, лямбда не использует ключевое слово return. Результатом является последнее выражение в её теле.
  • Ссылки на функции: В некоторых случаях вместо лямбды можно использовать ссылку на существующую функцию (::functionName), что является альтернативным, более компактным способом.

Практическое применение

Лямбды широко используются в Kotlin для:

  • Callback'ов и обработчиков событий (например, в Android для обработки кликов на View).
  • Операций над коллекциями (filter, map, reduce, forEach и т.д.).
  • Создания DSL (Domain Specific Languages) благодаря их компактному синтаксису.
  • Параллелизации и асинхронных задач (например, в корутинах).

Таким образом, лямбда функции — это мощный и элегантный инструмент в Kotlin, который уменьшает количество шаблонного кода, повышает читаемость и позволяет эффективно реализовывать принципы функционального программирования в сочетании с объектно-ориентированным подходом.