Kotlin学习五:高阶函数

定义高阶函数

  • 想定义自己的函数式API,那就得借助高阶函数来实现
  • 定义:如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数。
  • 定义函数类型:(String, Int)-> Unit,在函数类型钱加上ClassName表示这个函数类型是定义在哪个类当中的
  • 作用:高阶函数允许让函数类型的参数来决定函数的执行逻辑
  • Lambda表示式是常见的高阶函数的调用方式

内联函数

  • 高阶函数的实现原理:Lambda表达式在底层被转换成了匿名类的实现方式,每调用一次Lambda表达式都会创建一个新的匿名类实例,造成额外的内存和性能开销
  • 内联函数可以将Lambda表达式带来的运行时开销完全消除
  • 内联函数的使用:在定义高阶函数时,加上inline关键字即可
  • 内联函数的转换过程:
    • 将Lambda表达式中的代码替换到函数类型参数调用的地方
    • 再将内联函数中的全部代码替换到函数调用的地方
  • 如果一个高阶函数接收了两个或者更多函数类型的参数,并给函数添加了inline关键字,编译器将自动将所有的Lambda表达式进行内联,可以使用noinline关键词使某一个函数不被内联
  • 内联函数在编译时会进行代码替换,因此它没有真正的参数属性,非内敛的函数类型参数可以自由地传递给其他任何函数,因为它就是一个真实的参数,而内联函数类型只允许传递给另外一个内联函数
  • 内联函数和非内联函数还有一个重要的区别,就是内联函数引用的Lambda表达式时可以使用return进行返回的,而非内联函数只能进行局部返回
  • 在高阶函数中创建了另外的Lambda表达式或者匿名类的实现,并且在这些实现中调用了函数类型参数,此时将高阶函数声明为内联函数就一定会提示错误,因为内联函数中的函数类型可以直接return返回,而在匿名类中又不能直接返回,造成了冲突
  • crossinline:用于保证在内联函数的Lambda表达式中一定不会使用return关键字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值