【2023】Kotlin教程 第二篇 面向对象与函数式编程 第13章 函数式编程基石——高阶函数和Lambda表达式 13.3 Lambda表达式 13.3.1 Lambda表达式标准语法格式

【2023】Kotlin教程

在这里插入图片描述

第二篇 面向对象与函数式编程

第13章 函数式编程基石——高阶函数和Lambda表达式

函数式编程思想虽然与面向对象一样立即悠久,但是支持函数式编程的计算机语言不过是近几年的事情。这些语言有Swift、Python、Java 8和C++ 11等,作为新生的语言Kotlin也支持函数式编程。

13.3 Lambda表达式

Lambda表达式是一种匿名函数,可以作为表达式、函数参数和函数返回值使用,Lambda表达式的运算结果是一个函数。

13.3.1 Lambda表达式标准语法格式

Kotlin中的Lambda表达式很灵活,其标准语法格式如下:

{
    
    参数列表 ->
 	Lambda体
}

其中,Lambda表达式的参数列表与函数的参数列表形式类似,但是Lambda表达式参数列表前后没有小括号。箭头符号将参数列表与Lambda体分隔开,Lambda表达式不需要声明返回类型。

Lambda表达式可以有返回值,如果没有return语句Lambda体的最后一个表达式就是Lambda表达式的返回值,如果有return语句返回值是return语句后面的表达式。

【提示】Lambda表达式与函数、匿名函数一样都有函数类型,但从Lambda表达式的定义中只能看到参数类型,看不到返回类型声明,那是因为返回类型可以通过上下文推导出来。

举个栗子:

private fun calculate(opr: Char): (Int, Int) -> Int {
    
    

    return when (opr) {
    
    
        '+' -> {
    
     a: Int, b: Int -> a + b }
        '-' -> {
    
     a: Int, b: Int -> a - b }
        '*' -> {
    
     a: Int, b: Int -> a * b }
        else -> {
    
     a: Int, b: Int -> a / b }
    }
}

fun main() {
    
    

    val f1 = calculate('+')
    val f2 = calculate('-')
    val f3 = calculate('*')
    val f4 = calculate('/')

    println(f1(10, 5))
    println(f2(10, 5))
    println(f3(10, 5))
    println(f4(10, 5))
}

在这里插入图片描述

calculate函数是高阶函数,它的返回值是函数类型(Int,Int)->Int。代码分别定义了4个Lambda表达式,它们的函数类型(Int,Int)->Int与calculate函数要求的返回类型是一致的。

当然我们还可以写成表达式函数体的形式:

private fun calculate(opr: Char): (Int, Int) -> Int = when (opr) {
    
    
    '+' -> {
    
     a: Int, b: Int -> a + b }
    '-' -> {
    
     a: Int, b: Int -> a - b }
    '*' -> {
    
     a: Int, b: Int -> a * b }
    else -> {
    
     a: Int, b: Int -> a / b }
}

fun main() {
    
    

    val f1 = calculate('+')
    val f2 = calculate('-')
    val f3 = calculate('*')
    val f4 = calculate('/')

    println(f1(10, 5))
    println(f2(10, 5))
    println(f3(10, 5))
    println(f4(10, 5))
}

不难发现,表达式函数体要比代码块函数体代码简洁很多。

猜你喜欢

转载自blog.csdn.net/weixin_44226181/article/details/130024460
今日推荐