天天看点

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)