Kotlin学习笔记十八、高阶函数

高阶函数函数定义:

参数类型包含函数类型或者返回值类型为函数类型的函数为高阶函数

本节没有太多的文字内容叙述,直接上代码:

示例一、
val mMap:MutableMap<String, String> = mutableMapOf("a" to "b")
// 上面的“.forEach”、“.map”两个高阶函数以及类似这样的高阶行数:其实他的完整形态应该是这样的:“、map()”、“.forEach()”;
// 当只有一个lambda表达式作为参数的时候我们可以直接省略小括号“()”
mMap.forEach {

}

val mIntArray: Array<Int> = arrayOf(1,2,3,4,5,6)
mIntArray.map {

}
示例二、

高阶函数:参数类型 包含 函数类型 或者 返回值类型为函数类型 的函数为高阶函数

fun returnFunction(): () -> Long {
    return {
        System.currentTimeMillis()
    }
}

注意上面“return”后面的写法:“return{ … }”表示返回的是一个函数。

另外比如下面的例子:数组、map集合、list集合的forEach循环:
1、“Array.”表示这是一个扩展函数;
2、 表示泛型,指定动态的指定调用该函数的数据类型;
3、“action: (T) -> Unit”表示接收一个函数类型作为参数;
4、“action(element)”表示调用函数。

public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
}

a、“Map<out K, V>.”表示这是一个扩展函数;
b、“<K, V>”两个泛型指定map的key和value的类型。
c、“action: (Map.Entry<K, V>) -> Unit”表示接收一个函数类型作为参数;
d、“action(element)”表示调用函数。

public inline fun <K, V> Map<out K, V>.forEach(action: (Map.Entry<K, V>) -> Unit): Unit {
    for (element in this) action(element)
}

Ⅰ、下面是将map转换为list的一个扩展函数,
Ⅱ、“”泛型,指定数据类型;
Ⅲ、“transform:(Int) -> R”接收函数类型作为参数。
Ⅳ、“ mapTo(ArrayList(size), transform)”:调用的是另一个高阶函数。

inline fun <R> IntArray.map(transform:(Int) -> R):List<R>{
    return mapTo(ArrayList<R>(size), transform)
}
示例三:

收起、折叠暂时不访问的代码的方式://region+折叠、//endregion;然后快捷键:Ctrl + “-”、Ctrl + “+”

说明:
1、该方法的功能:判断block()方法执行过程中耗时多少;
2、 “block:()”:block表示一个参数;后面的“()”表示这个block参数的类型是ige函数方法;
3、“Unit”:表示函数的返回值类型。

//region+折叠(与后面的“endregion”组合使用)
fun cost(block:() -> Unit){
    val start = System.currentTimeMillis();
    block()
    println("${System.currentTimeMillis() - start}")
}
//endregion

说明:下面的 “() -> Long”:“()”表示返回一个函数,类型为后面的Long

fun fibonacci() : () -> Long{//斐波那契数列函数
    var first = 0L
    var second = 1L
    return {
        val next = first + second
        val current = first
        first = second
        second = next
        current
    }
}

main方法里面cost(block:() -> Unit)函数的用法:

    cost {
        //因为“fibonacci()”返回的是一个返回值为Long的函数,因此“fibonacciNext”本质上也是一个函数。
        val fibonacciNext = fibonacci()
        for (index in 0 .. 10){
            println("${fibonacciNext()}")
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值