Лямбда выражения и анонимные функции являются "литералами фунций", которые не объявлены, но переданы как выражения.
Лямбда выражения пишутся внутри блока (начинаются с { и заканчиваются }). Параметры пишутся внутри блока и по желанию можно указать также тип параметров затем пишется символ -> и код для выполнения. После -> можно указать возвращаемый выражением тип и если тип возвращаемых данных не является Unit, в таком случае в качестве значения для возвращения используется последняя строка кода в лямбда выражении:
var a = { f: Int, d : Int -> Unit
println(f+d) // Вывести в консоль сумму значений параметров
}
a.invoke(40, 50) // 90
Пример возвращения значения значения:
Объявляется лямбда получающее два значения и возвращающее значение типа Int. После указания типа необходимо поставить абзац или написать ; для разрыва строки:
val g = { f:Int, s : Int -> Int
f+s
}
val d = g.invoke(10,20) // Выполнить лямбду и присвоить результат переменной d
println("D is $d") // Вывести значение переменной d в консоль: D is 30
Когда лямбда передаётся в качестве последнего параметра функции, при вызове функции его можно написать после скобок "()". Если лямбда принимает один параметр и в начале лямбды если его не писать компилятор подставляет вместо параметра ключевое слово it.
Объявляем функцию, которая принимает два параметра. Первый имеет тип Int второй лямбда выражение:
fun lambdaTest(param : Int, l : (Int) -> Int)
{
// Выполняем код лямбда и полученный результат присваиваем локальной переменной
val result = l.invoke(param)
// Вывести результат полученный выполнением лямбда выражения в консоль
println(result)
}
Передав первый параметр (передаётся значение 10), лямбда можно за пределами скобок функции написать:
lambdaTest(10) {
// Так как лямбда принимает только один параметр типа Int, его можно не писать и компилятор вместо него подставляет ключевое слово it. Лямбда состоит из одной строки, которая возвращается как результат выполнения, так как лямбда в сигнатуре функции объявляется как лямбда которая принимает один параметр и возвращает результат с типом Int (целое число)
it + 20
}
btn.setOnClickListener {
println((it as Button).text)
}
Реклама