1. Conceito
A expressão lambda em Kotlin é uma forma de sintaxe concisa usada para representar uma função anônima . As expressões lambda podem ser passadas como parâmetros em funções ou atribuídas a uma variável ou constante .
2. Sintaxe básica:
{
参数列表 -> 函数体 }
Dentre eles, a lista de parâmetros é opcional, se houver parâmetros, cada parâmetro precisa ser separado por vírgula, e o corpo da função é obrigatório e utilizado para definir o funcionamento da função.
Por exemplo, a seguinte expressão lambda representa uma função que aceita dois argumentos inteiros e retorna sua soma:
val sum = {
a: Int, b: Int -> a + b }
// 参数类型可以从上下文中推断出来,则可以省略参数类型
// 下面的代码等价于上面的代码
val sum = {
a, b -> a + b }
3. Parâmetros implícitos:
Se a expressão lambda tiver apenas um parâmetro e o tipo desse parâmetro puder ser inferido do contexto, você poderá usar a palavra-chave
it
para se referir ao parâmetro
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val evenNumbers = numbers.filter {
it % 2 == 0 }
Neste exemplo, filter
a função aceita uma expressão Lambda como argumento e retorna uma nova lista contendo todos os elementos que satisfazem a condição.
4. Expressões Lambda finais
Em Kotlin, se o último parâmetro de uma função for um tipo de função , podemos escrever a expressão lambda entre chaves, fora dos parênteses, em vez de passar a expressão lambda entre parênteses. Essa sintaxe é chamada de "expressão lambda final" ou "expressão lambda final".
Por exemplo:
// 最后一个参数 operation 是一个函数类型
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
// 我们在调用的时候直接使用 {a,b -> a + b}
val sum = calculate(10, 20) {
a, b -> a + b }
val difference = calculate(30, 15) {
a, b -> a - b }
5. Expressão retorna resultado
Você pode usar a instrução return em uma expressão Lambda para retornar um resultado. No entanto, se a expressão lambda for definida dentro de uma função, a instrução return retornará o resultado da função, não o resultado da expressão lambda. Se quiser retornar o resultado de uma expressão Lambda, você precisará usar um rótulo para especificar que o resultado da expressão Lambda será retornado.
Por exemplo:
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val result = numbers.map {
if (it == 3) return@map "three" "number $it"
}
// 打印的结果是[number 1, number 2, three, number 4, number 5]
println(result)
}