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

Что такое анонимная функция?

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

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

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

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

Анонимные функции (Lambda Expression)

Анонимная функция (lambda, анонимная функция, функция без имени) — это функция, которая не имеет явно заданного имени и определяется прямо в месте использования. Это мощный инструмент для написания компактного и функционального кода.

Основное определение

Анонимная функция:

  • Не имеет имени
  • Определяется и используется на месте
  • Передаётся как аргумент другой функции
  • Часто присваивается переменной или используется в функциональном программировании

Синтаксис в Kotlin

Основной синтаксис lambda выражения:

{ параметры -> тело функции }

Примеры базовых lambda функций:

// Простейшая lambda: без параметров
val greet = { println("Hello!") }
greet()  // вызов: Hello!

// Lambda с параметром
val add = { a: Int, b: Int -> a + b }
println(add(5, 3))  // результат: 8

// Lambda с одним параметром (it)
val square = { x: Int -> x * x }
println(square(4))  // результат: 16

// Lambda, возвращающая другую lambda
val multiplier = { factor: Int -> { x: Int -> x * factor } }
val doubler = multiplier(2)
println(doubler(5))  // результат: 10

Использование в коллекциях (самое распространённое)

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

// map() — преобразование каждого элемента
val squared = numbers.map { x -> x * x }
println(squared)  // [1, 4, 9, 16, 25]

// filter() — фильтрация
val evens = numbers.filter { x -> x % 2 == 0 }
println(evens)  // [2, 4]

// forEach() — итерация
numbers.forEach { x -> println(x) }

// reduce() — агрегация
val sum = numbers.reduce { acc, x -> acc + x }
println(sum)  // 15

// any(), all() — проверки
val hasEven = numbers.any { x -> x % 2 == 0 }
println(hasEven)  // true

Использование в Android

1. Click listeners (самый частый case)

button.setOnClickListener { v ->
    Toast.makeText(this, "Button clicked!", Toast.LENGTH_SHORT).show()
}

// Если не нужен параметр
button.setOnClickListener {
    startActivity(Intent(this, MainActivity::class.java))
}

2. Callbacks и асинхронные операции

val apiClient = ApiClient()
apiClient.fetchUser(userId) { user ->
    // обработка результата
    displayUser(user)
}

// или с error callback
apiClient.fetchData(
    { data -> handleSuccess(data) },
    { error -> handleError(error) }
)

3. Coroutines (современный подход)

viewModelScope.launch {
    try {
        val user = userRepository.getUser(userId)  // suspend function
        updateUI(user)
    } catch (e: Exception) {
        showError(e.message)
    }
}

// или с Flow для потока данных
userFlow.collect { user ->
    updateUI(user)
}

Синтаксические упрощения в Kotlin

Опускание скобок, если lambda последний параметр:

// Полная версия
list.filter({ x -> x > 5 })

// Упрощённо (скобки опускаются)
list.filter { x -> x > 5 }

// Если параметр один, можно использовать 'it'
list.filter { it > 5 }

Безлюдная запись (point-free style):

val isEven = { x: Int -> x % 2 == 0 }
list.filter(isEven)

// или использование reference
list.filter(Int::isEven)  // если метод существует

Анонимные функции vs Named функции

// Именованная функция
fun multiply(a: Int, b: Int): Int {
    return a * b
}

// Эквивалентная анонимная функция
val multiply: (Int, Int) -> Int = { a, b -> a * b }

// Тип переменной: (параметры) -> возвращаемый тип

Преимущества анонимных функций

Компактность кода — не нужно создавать отдельный метод

Замыкания (closures) — доступ к переменным из внешней области видимости

val multiplier = 2
val numbers = listOf(1, 2, 3)
val doubled = numbers.map { it * multiplier }  // доступ к multiplier

Функциональное программирование — compose, chain операции

Асинхронность — удобно работать с callbacks и coroutines

Когда использовать

Короткая логика (1-3 строки)

Callbacks и listeners

Трансформации коллекций (map, filter, reduce)

Асинхронные операции

Сложная логика — лучше именованная функция

Переиспользуемый код — выдели в отдельный метод

Заключение

Анонимные функции (lambda) — необходимый инструмент в современном Android программировании. Они делают код компактнее, выразительнее и функциональнее. В Kotlin это встроенная часть языка с изящным синтаксисом. Используй их для коротких операций и callbacks, но не забывай о читаемости кода.

Что такое анонимная функция? | PrepBro