Ответ
Лямбда-функция (лямбда-выражение) — это анонимная функция, объявленная без имени. В Kotlin она записывается в фигурных скобках {} и может принимать параметры и возвращать значение. Лямбды часто используются для краткой передачи логики в функции высшего порядка.
Пример:
val sum = { a: Int, b: Int -> a + b }
println(sum(2, 3)) // 5
Ключевые особенности:
- Краткий синтаксис (можно опустить типы, если они выводимы)
- Может быть передана как аргумент (
view.setOnClickListener { ... }) - Последнее выражение — возвращаемое значение
- Имеет доступ к переменным из внешней области видимости (closure)
Ответ 18+ 🔞
А, лямбды! Ну это ж, ебать мои старые костыли, просто способ запихнуть кусок логики в переменную, как будто это какая-то вещь, а не функция. Представь, что ты можешь взять действие — например, «сложить два числа» — и сунуть его в коробку с надписью sum. И потом эту коробку тыкать куда угодно.
Вот смотри, самый простой пример, чтобы мозг не взорвался:
val sum = { a: Int, b: Int -> a + b }
println(sum(2, 3)) // 5
Видишь? Никакого fun sum(a: Int, b: Int): Int. Просто взяли, обернули в фигурные скобки, стрелочкой -> отделили аргументы от тела, и всё — у тебя уже готовая функция в переменной. Красота, ёпта.
А теперь главные фишки, из-за которых их все так любят и ненавидят одновременно:
- Краткость — сестра таланта, а иногда и полный пиздец. Если компилятор умный и сам догадывается про типы, их можно вообще не писать. Получается какая-то магия, от которой у новичков волнение ебать.
- Передача как аргумент — это вообще их конёк. Весь современный андроид на этом стоит.
view.setOnClickListener { /* делай тут что хочешь */ }. Вместо того чтобы городить отдельный класс-слушатель, ты просто пишешь логику в скобках. Удобно, хоть и выглядит сначала как хуй в пальто. - Что последнее выразил, то и вернул. Внутри лямбды можешь писать сколько угодно строк, но вернётся только результат последнего выражения. Никакого
returnне надо. Если, конечно, ты не хочешь всех запутать — тогда, конечно, пиши. - Замыкание (closure). Вот это мощная штука. Лямбда помнит всё, что было вокруг неё в момент создания. Может хватать переменные из внешней функции и использовать их, даже когда та уже давно накрылась медным тазом. Очень удобно, но иногда приводит к удивлению пиздец, если не понимать, как это работает.
Короче, лямбды — это как карманный мультитул. Сначала кажется, зачем эта хитрая жопа, обычные функции и так работают. А потом втягиваешься, начинаешь их пихать везде, и код становится в разы короче и выразительнее. Главное — не переборщить, а то можно получить такую портянку в одну строку, что сам от себя охуеешь через неделю.