【2023】Kotlin教程
文章目录
第二篇 面向对象与函数式编程
第13章 函数式编程基石——高阶函数和Lambda表达式
函数式编程思想虽然与面向对象一样立即悠久,但是支持函数式编程的计算机语言不过是近几年的事情。这些语言有Swift、Python、Java 8和C++ 11等,作为新生的语言Kotlin也支持函数式编程。
13.3 Lambda表达式
Lambda表达式是一种匿名函数,可以作为表达式、函数参数和函数返回值使用,Lambda表达式的运算结果是一个函数。
13.3.4 Lambda表达式与return语句
Lambda表达式体中也可以使用return语句,它会使程序跳出Lambda表达式体。示例代码如下:
// 累加求和函数
fun sum(vararg num: Int): Int {
var total = 0
num.forEach {
// if (it == 10) return -1 // 返回最近的函数
if (it == 10) return@forEach // 返回Lambda表达式函数
total += it
}
return total
}
fun main() {
val n = sum(1, 2, 10, 3)
println(n) // 6
val add = label@{
val a = 1
val b = 2
return@label 10
a + b
}
// 调用Lambda表达式add
println(add()) // 10
}
这段代码中,forEach
函数后面是一个Lambda 表达式,如果使用 if (it == 10) return -1
,会返回最近的sum 函数,不是返回Lambda 表达式forEach。
为了返回Lambda表达式则需要在return语句后面加上标签,@forEach是隐式声明标签,标签名是Lambda表达式所在函数名(forEach)。
也可以为Lambda表达式声明显式标签,
【提示】 forEach是集合、数组或区间的函数,它后面是一个Lambda表达式,集合、数组或区间对象调用forEach函数时,会将它们的每一个元素传递给Lambda表达式并执行。