最近開始自學 Kotlin 了,作為一門簡介的語言,我們不僅僅要從文法上開始學習,更應該學會利用其他方式把它的優勢發揮到極緻,是以首先讓我們先了解一下 Lambda 表達式吧。
什麼是 Lambda 表達式
Lambda 就是一個匿名函數,而函數其實就是功能( function ),匿名函數,就是匿名的功能代碼。具體寫法如下:
{ [ 參數清單 ] -> [ 函數體,最後一行是傳回值 ] }
比如:
val sum = { a:Int , b: Int -> a + b }
例子中可以看出我們先定義了一個 sum 常量,指派為一個 Lambda 表達式,它是先用一對大括号括起來,先寫下參數名稱和參數類型,接着寫下「->」,最後寫函數體,函數體最後一行的結果就是傳回值。
Lambda 的類型表示舉例
-
()-> Unit
- 無參,傳回值為 Unit
-
(Int) -> Int
- 傳入整型,傳回一個整形
-
(String,(String -> String))-> Boolean
- 傳入字元串和 Lambda 表達式,傳回 Boolean 值
Lambda 表達式的調用
- 用 () 進行調用 ;
- 等價于 invoke() ;
val sum = {a: Int, b:Int -> a + b}
sum (,) // sum.invoke(3,4)
Lambda 表達式的簡化
- 函數參數調用時最後一個 Lambda 可以移出去
list.forEach({ element -> println(element) })
//等價于
list.forEach() { element -> println(element) }
- 函數參數隻有一個Lambda,調用時小括号可以省略
list.forEach() { element -> println(element) }
//等價于
list.forEach { element -> println(element) }
- Lambda隻有一個參數可以預設為 it
list.forEach { element -> println(element) }
//等價于
list.forEach { println(it) }
- 入參,傳回值和形參一緻的函數可以用函數引用的方式作為實參傳入
list.forEach { println(it) }
//等價于
list.forEach(::println)