为了账号安全,请及时绑定邮箱和手机立即绑定

Kotlin 手记 -- 高阶函数

标签:
Kotlin

接收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())
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
3
获赞与收藏
0

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消