个性化阅读
专注于IT技术分析

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

跨行注释

为了防止从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函数参数, 并且不包含任何类型化的参数, 则编译器将生成警告。

赞(0)
未经允许不得转载:srcmini » Kotlin内联函数

评论 抢沙发

评论前必须登录!