expressão lambda kotlin

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-chaveit 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, filtera 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)
}

Acho que você gosta

Origin blog.csdn.net/flytosky21/article/details/130030489
Recomendado
Clasificación