- Kotlin环境设置(命令行)
- Kotlin Hello World程序(命令行)
- Kotlin程序概念解释
- Kotlin开发环境设置(IDE)
- Kotlin第一个程序(IDE)
- Kotlin变量
- Kotlin数据类型
- Kotlin类型转换
- Kotlin运算符
- Kotlin表达式、语句和块
- Kotlin标准输入/输出
- Kotlin注释
- 控制流程
- 函数
- 数组
- 字符串
- 异常处理
- 空安全
- 集合
- 注解
- 反射
- Kotlin OOP
- 范围
- Java互操作性
- 正则表达式
Kotlin内联函数
内联函数使用关键字内联声明,内联函数的使用增强了高阶函数的性能。 内联函数告诉编译器将参数和函数复制到调用站点。
虚函数或局部函数不能声明为内联。 以下是内联函数内部不支持的一些表达式和声明:
- 局部类声明
- 内部嵌套类的声明
- 函数表达式
- 声明局部函数
局部可选参数的默认值
让我们看一下内联函数的基本示例:
fun main(args: Array<String>) { inlineFunction({ println("调用内联函数")}) } inline fun inlineFunction(myFun: () -> Unit ) { myFun() print("内联函数内的代码") }
执行上面示例代码,得到以下结果 -
调用内联函数 内联函数内的代码
非局部控制流程
从内联函数,可以从lambda
表达式本身返回。 这也将导致退出调用内联函数。 在这种情况下,允许函数文字具有非局部返回语句。
fun main(args: Array<String>) { inlineFunction({ println("调用内联函数") return},{ println("内联函数中的下一个参数")}) } inline fun inlineFunction(myFun: () -> Unit, nxtFun: () -> Unit) { myFun() nxtFun() print("内联函数内的代码") }
执行上面示例代码,得到以下结果 -
调用内联函数
crossline注解
要防止从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("调用内联函数")}, { println("内联函数中的下一个参数")} ) println("这是关闭main函数") } inline fun inlineFunctionExample(myFun: () -> Unit, noinline nxtFun: () -> Unit ) { myFun() nxtFun() println("内联函数内的代码") }
执行上面示例代码,得到以下结果 -
调用内联函数 内联函数中的下一个参数 内联函数内的代码 这是关闭main函数
如果内联函数不包含noinline
函数参数且没有reified
类型参数,则编译器将生成警告。
上一篇:Kotlin高阶函数
下一篇:Kotlin数组
扫描二维码
程序员编程王