Лямбда-выражения в Kotlin | OTUS

Лямбда-выражения в Kotlin

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

Введение в лямбда

Кроме вышесказанного, лямбда известна и как анонимная функция, получившая название от лямбда-исчисления А. Черча, где все функции анонимны. А еще лямбда -- это синоним замыкания (closures). Собственно говоря, лямбда-выражения применяются и в прочих языках программирования, к примеру, в том же Python.

Говоря о замыканиях, следует сказать, что они способны «закрывать» константы и переменные в пределах своей области видимости. Что это значит? Ну, например, то, что лямбда способна получать доступ, а также сохранять и управлять значением любой переменной/константы из окружающего контекста, то есть она действует в качестве вложенной функции. Принято считать, что константы и переменные, применяемые в теле лямбда-выражения, «захвачены» лямбдой.

Может возникнуть резонный вопрос: если лямбды -- это функции без названий, то как с ними работать на практике? На деле, для применения лямбда-выражения надо сначала присвоить это выражение переменной либо константе, причем сделать это можно и в качестве аргумента другой функции.

Объявим переменную, которая способна содержать лямбду:

1-20219-2318df.png

Итак, наша Lambda multiplyLambda принимает 2 значения типа Int, а также возвращает Int. Следует обратить внимание, что это, по сути, то же самое, что и объявление переменной для функции (опять же, вспоминаем, что лямбда — это всего лишь функция без названия). При этом типом лямбды будет тип функции.

Лямбда присваивается переменной так:

2-20219-d7afb9.png

Это напоминает объявление функции, но есть нюансы. Да, здесь такой же перечень параметров, однако символ -> указывает на тип возвращаемого значения. При этом тело лямбды у нас начинается после возвращаемого типа. Также следует добавить, что Lambda-выражение возвращает значение последнего выражения в теле.

После определения лямбды-переменной можно применять ее в качестве функции, например:

3-20219-070035.png

Итак, lambdaResult равен 8. Но и тут есть нюанс: лямбда не позволяет применять названия для аргументов. То есть вы не сможете написать multiplyLambda(a = 4, b = 2). То есть, в отличие от стандартных функций, у вас нет возможности применять при вызове лямбды именованные аргументы.

По материалам сайта https://kotlins.org/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто