1. 概念
Kotlin中的Lambda表達式是一種,用于表示一個
。Lambda表達式可以在函數(shù)中作為
,也可以被
。
2. 基本語法:
{ 參數(shù)列表 -> 函數(shù)體 }
其中,參數(shù)列表是可選的,如果有參數(shù),需要用逗號分隔每個參數(shù),而函數(shù)體是必須的,用于定義函數(shù)的操作。
例如,下面的Lambda表達式表示一個接受兩個整數(shù)參數(shù)并返回它們的和的函數(shù):
val sum = { a: Int, b: Int -> a + b }
// 參數(shù)類型可以從上下文中推斷出來,則可以省略參數(shù)類型
// 下面的代碼等價于上面的代碼
val sum = { a, b -> a + b }
3. 隱式參數(shù):
如果Lambda表達式
,并且該參數(shù)的類型可以從上下文中推斷出來,則可以
來引用該參數(shù)
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val evenNumbers = numbers.filter { it % 2 == 0 }
在這個例子中,filter函數(shù)接受一個Lambda表達式作為參數(shù),并返回一個包含所有滿足條件的元素的新列表。
4. 尾隨Lambda表達式
在Kotlin中,如果
,我們可以
,而不是在圓括號內(nèi)傳遞Lambda表達式。這種語法被稱為"尾隨Lambda表達式"或"末尾Lambda表達式"。
例如:
// 最后一個參數(shù) operation 是一個函數(shù)類型
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
// 我們在調(diào)用的時候直接使用 {a,b -> a + b}
val sum = calculate(10, 20) { a, b -> a + b }
val difference = calculate(30, 15) { a, b -> a - b }
5. 表達式返回結(jié)果
在Lambda表達式中可以使用return語句返回結(jié)果。但是,如果Lambda表達式是在一個函數(shù)內(nèi)部定義的,則return語句將返回函數(shù)的結(jié)果,而不是Lambda表達式的結(jié)果。如果要返回Lambda表達式的結(jié)果,則需要使用標簽來指定返回的是Lambda表達式的結(jié)果
例如:
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val result = numbers.map {
if (it == 3) return@map "three" "number $it"
}
// 打印的結(jié)果是[number 1, number 2, three, number 4, number 5]
println(result)
}