文章目录

  1. 1. Lambda 表达式
  2. 2. 高阶函数
  3. 3. 参考资料
  4. 4. 推荐阅读


微信公众号

Lambda 表达式

学习过 Java 8 的读者,都了解 Lambda 表达式。事实上,Kotlin 也有 Lambda 表达式{ 参数名 -> 函数体 }

val sum = { x: Int, y: Int -> x + y }

在 Kotlin 中,如果函数的最后一个参数是一个函数,并且传递一个 lambda 表达
式作为相应的参数,我们可以在()之外指定它。

fun foo(bar: Int = 0, qux: () -> Unit) { /* …… */ }
foo(1) { println("hello") } 
foo { println("hello") }

此外,如果函数字面值只有一个参数, 那么它的声明可以省略,我们使用默认it

val arr = arrayListOf<String>("liang", "gzone")
arr.map { it.toUpperCase() }.forEach{
    println(it)
}

注意的是,与 Java 不同的是,Kotlin 可以修改闭包中捕获的变量,即在外部作⽤域中声明的变量。

fun main(args: Array<String>) {
    val arr = arrayListOf<String>("liang", "gzone")
    var sum = 0
    arr.forEach {
        sum += 1
    }
    println(sum)
}

这里,补充下闭包的概念,所谓闭包,即是函数中包含函数。不同的,Java 是不支持闭包的。在 Kotlin 中,闭包可以携带状态,引用外部变量,并改变外部变量的值。

fun func1(){
    fun func2(){ /* …… */ }
}

高阶函数

常用的高阶函数,有 forEach、map、flatMap、reduce、fold、filter、takeWhile、let、apply、with、use 等,与 Java 用法类似,不再讲解。

参考资料

推荐阅读

文章目录

  1. 1. Lambda 表达式
  2. 2. 高阶函数
  3. 3. 参考资料
  4. 4. 推荐阅读