Kotlin内联函数

内联函数用关键字inline声明。内联函数的使用增强了高阶函数的性能。内联函数告诉编译器将参数和函数复制到调用站点。
虚函数或局部函数不能声明为内联。以下是一些内联函数中某些地方不支持的表达式和声明:

  • 地方课程的声明
  • 内部嵌套类的声明
  • 函数表达式
  • 局部功能声明
  • 可选参数的默认值
让我们看一下内联函数的基本示例:
fun main(args: Array< String> ) { inlineFunction({ println("calling inline functions")}) }inline fun inlineFunction(myFun: () -> Unit ) { myFun() print("code inside inline function") }

输出:
calling inline functions code inside inline function

非本地控制流
从内联函数, 我们可以从lambda表达式本身返回。这也将导致退出调用内联函数的函数。在这种情况下, 函数文字可以包含非本地return语句。
fun main(args: Array< String> ) { inlineFunction({ println("calling inline functions") return}, { println("next parameter in inline functions")}) }inline fun inlineFunction(myFun: () -> Unit, nxtFun: () -> Unit) { myFun() nxtFun() print("code inside inline function") }

输出:
calling inline functions

跨行注释
【Kotlin内联函数】为了防止从lambda表达式和内联函数本身返回, 我们可以将lambda表达式标记为crossinline。如果在该lambda表达式中找到了return语句, 则将引发编译器错误。
fun main(args: Array< String> ) { inlineFunction({ println("calling inline functions") return // compile time error }, { println("next parameter in inline functions")}) }inline fun inlineFunction(crossline myFun: () -> Unit, nxtFun: () -> Unit) { myFun() nxtFun() print("code inside inline function") }

Noinline编辑
在内联函数中, 当我们希望将在内联函数中传递的某些lambda作为内联时, 请使用noinline修饰符标记其他函数参数。这用于设置在调用中不内联的表达式。
fun main(args: Array< String> ) { inlineFunctionExample({println("calling inline functions")}, {println("next parameter in inline functions")} )println("this is main function closing") }inline fun inlineFunctionExample(myFun: () -> Unit, noinline nxtFun: () -> Unit) { myFun() nxtFun() println("code inside inline function") }

输出:
calling inline functions next parameter in inline functions code inside inline function this is main function closing

如果一个内联函数不包含任何noinline函数参数, 并且不包含任何类型化的参数, 则编译器将生成警告。

    推荐阅读