kotlin高阶函数

高阶函数

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

定义函数类型

(type1, type2, type3, ...) -> returnType

左边括号里面的是函数接收的参数类型, 右边是返回值类型,如果没有参数那么用(),没有返回值用Unit

 fun example(func : (String, String) -> Boolean) {
     func("hello", "halo")
 }

fun operateString(str1: String, str2: String, operation: (String, String) -> Boolean): Boolean {
    return operation(str1, str2)
}

fun compare(str1: String, str2: String): Boolean {
    return str1 > str2
}

fun test() {
    operateString("hello", "halo", ::compare)
}

高阶函数主要是结合Lambda表达式
Lambda表达式: {参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}
最后一行代码会自动作为Lambda表达式的返回值。

operateString("hello", "halo") {str1, str2 -> str1 > str2}

传递上下文

当需要连续调用同一个对象的多个方法时,apply函数可以让代码变得更加精简。使用高阶函数实现

fun StringBuilder.build(block : StringBuilder.() -> Unit): StringBuilder {
    block()
    //StringBuilder类定义了一个扩展函数Build是一个高阶函数,接收一个函数参数。返回值也是StringBuilder
    //函数类型参数的声明方式是className.(),表示这个函数类型是定义在这个类中的。当我们调用build
    //函数时传入的Lambda表达式将会自动拥有对应类的上下文
    return this
}

 StringBuilder().build {
     append("ppp")
     append("kkk")
 }

使用泛型

inline  fun <T> T.build(block: T.() -> Unit) : T {
     block()
     return this
 }
 
 val str: String = ""
 str.build { 
     
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值