mysql 内联函数_Kotlin内联函数

本文介绍了内联函数的概念及其在提高程序性能方面的作用。探讨了内联函数如何在编译时展开,并列举了一些不支持的表达式和声明。通过具体示例展示了内联函数的基本用法,包括lambda表达式的使用、非局部返回以及crossinline和noinline修饰符的应用。
摘要由CSDN通过智能技术生成

内联函数使用关键字内联声明,内联函数的使用增强了高阶函数的性能。 内联函数告诉编译器将参数和函数复制到调用站点。

虚函数或局部函数不能声明为内联。 以下是内联函数内部不支持的一些表达式和声明:

局部类声明

内部嵌套类的声明

函数表达式

声明局部函数

局部可选参数的默认值

让我们看一下内联函数的基本示例:

fun main(args: Array) {

inlineFunction({ println("调用内联函数")})

}

inline fun inlineFunction(myFun: () -> Unit ) {

myFun()

print("内联函数内的代码")

}

执行上面示例代码,得到以下结果 -

调用内联函数

内联函数内的代码

非局部控制流程

从内联函数,可以从lambda表达式本身返回。 这也将导致退出调用内联函数。 在这种情况下,允许函数文字具有非局部返回语句。

fun main(args: Array) {

inlineFunction({ println("调用内联函数")

return},{ println("内联函数中的下一个参数")})

}

inline fun inlineFunction(myFun: () -> Unit, nxtFun: () -> Unit) {

myFun()

nxtFun()

print("内联函数内的代码")

}

执行上面示例代码,得到以下结果 -

调用内联函数

crossline注解

要防止从lambda表达式和内联函数本身返回,可以将lambda表达式标记为crossinline。 如果在lambda表达式中找到了return语句,则会抛出编译器错误。

fun main(args: Array) {

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) {

inlineFunctionExample({ println("调用内联函数")},

{ println("内联函数中的下一个参数")} )

println("这是关闭main函数")

}

inline fun inlineFunctionExample(myFun: () -> Unit, noinline nxtFun: () -> Unit ) {

myFun()

nxtFun()

println("内联函数内的代码")

}

执行上面示例代码,得到以下结果 -

调用内联函数

内联函数中的下一个参数

内联函数内的代码

这是关闭main函数

如果内联函数不包含noinline函数参数且没有reified类型参数,则编译器将生成警告。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值