继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Kotlin 手记 -- 高阶函数

晨猫
关注TA
已关注
手记 9
粉丝 3
获赞 0

接收Lambda参数的函数就可以称为具有函数式编程风格的API

高阶函数的定义:
如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数。

编程语言中有整型、布尔型等字段类型,而Kotlin又增加了一个函数类型的概念。
如果我们将这种函数类型添加到一个函数的参数声明或者返回值声明当中,那么这就是一个高阶函数了。

定义一个函数类型,基本规则如下:

(String, Int) -> Unit

-> 左边的部分就是用来声明该函数接收什么参数的,
多个参数之间使用逗号隔开,如果不接收任何参数,写—对空括号就可以了。
-> 右边的部分用于声明该函数的返回值是什么类型,
如果没有返回值就使用Unit,它大致相当于Java中的void。

将函数类型添加到某个函数的参数声明或者返回值声明上,那么这个函数就是—个高阶函数了,
如下所示:

fun example(func: (String, Int) -> Unit) {
    func("hello", 123)
}

使用示例:

fun plus(num1: Int, num2: Int): Int {
    return num1 + num2
}
fun minus(num1: Int, num2: Int): Int {
    return num1 - num2
}

fun main() {
    val num1 = 100
    val num2 = 80
    val result1 = num1AndNum2(num1, num2, ::plus)
    val result2 = num1AndNum2(num1, num2, ::minus)
    println("result1 is $result1")
    println("result2 is $result2")
}

第三个参数使用了::plus和::minus这种写法。
这是一种函数引用方式的写法,表示将plus()和minus()函数作为参数传递给num1AndNum2()函数

Kotlin还支持其他多种方式来调用高阶函数,比如Lambda表达式、匿名函数、成员引用等。
其中,Lambda表达式是最常见也是最普遍的高阶函数调用方式

fun main() {
    val num1 = 100
    val num2 = 80
    val result1 = num1AndNum2(num1, num2) { n1, n2 ->
        n1 + n2
    }
    val result2 = num1AndNum2(num1, num2) { n1, n2 ->
        n1 - n2
    }
    println("result1 is $result1")
    println("result2 is $result2")
}

Lambda表达式同样可以完整地表达—个函数的参数声明和返回值声明(Lambda表达式中的最后—行代码会自动作为返回值)

接下来我们就使用高阶函数模仿实现—个类似 apply函数 的功能。

fun StringBuilder.build(block: StringBuilder.() -> Unit): StringBuilder {
    block()
    return this
}

fun main() {
    val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
    val result = StringBuilder().build {
        append("Start eating fruits.\n")
        for (fruit in list) {
            append(fruit).append(" ")
        }
        append("Ate all fruits.\n")
    }
    println(result.toString())
}
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP