在Kotlin當中對於Lambda的支援相當強大
但對於一開始從Java轉入Kotlin的我來說稍微有點困擾
雖然Java 8開始也支援Lambda表示式,但這邊主要以Kotlin為主
內文記錄一些Kotlin上對於Lambda的使用筆記
1.Function Type
在Kotlin當中可以定義一個Function將其作為變數進行傳遞
例如
val randomTest = { Random().nextInt(12) +1 }
表示我定義一個randomTest的Function Type變數,大括號裡頭是要執行的內容
這是最簡略的寫法
呼叫randomTest()之後會回傳 Random().nextInt(12) +1 的執行結果
其實在回傳值前面還可以多塞一點動作,例如
val randomTest = {
println("randomTest\n")
Random().nextInt(12) +1
}
要注意,回傳的數值一定要放在最後一行。
此外,你也可以定義傳入的參數與回傳的參數型態
val randomTest: (Int, String) -> Int = { randomArge, message ->
println("$message \n")
Random().nextInt(randomArge) +1
}
randomTest: (Int, String) -> Int
randomTest 指定傳入兩個參數型態,分別為Int與String,並回傳 Int
大括號裡頭的 randomArge 與 message 則是傳入參數的變數名稱
結構解釋如下
變數名稱: (傳入值型態1, 傳入值型態2) -> 回傳值型態 = { 變數名稱1,變數名稱2 ->
// Do something
}
Kotlin支援型別判斷,可以不指定回傳值型態,因此也可以寫成這樣
變數名稱 = { 變數名稱1: 變數1型態, 變數名稱2: 變數2型態 ->
// Do something
}
參考資料:
Kotlin Tutorial(16)介面與實作(下)
http://www.codedata.com.tw/kotlin/kt16/
初探 Kotlin Lambda 表達式
https://medium.com/@louis383/%E5%88%9D%E6%8E%A2-kotlin-lambda-%E8%A1%A8%E9%81%94%E5%BC%8F-cfe8796c9fac
沒有留言:
張貼留言