天天看點

Kotlin 前奏 -- Lambda 表達式

最近開始自學 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 表達式的調用

  1. 用 () 進行調用 ;
  2. 等價于 invoke() ;
val sum = {a: Int, b:Int -> a + b}
sum (,) // sum.invoke(3,4)
           

Lambda 表達式的簡化

  1. 函數參數調用時最後一個 Lambda 可以移出去
list.forEach({ element -> println(element) })
//等價于
list.forEach() { element -> println(element) }
           
  1. 函數參數隻有一個Lambda,調用時小括号可以省略
list.forEach() { element -> println(element) }
//等價于
list.forEach { element -> println(element) }
           
  1. Lambda隻有一個參數可以預設為 it
list.forEach { element -> println(element) }
//等價于
list.forEach { println(it) }
           
  1. 入參,傳回值和形參一緻的函數可以用函數引用的方式作為實參傳入
list.forEach { println(it) }
//等價于
list.forEach(::println)