inline & noinline & crossinline
inline
- Kotlin对函数进行内联的支持
- inline可以让你使用内联,即将函数内容直插到调用处,优化代码结构,减少函数类型的对象的创建
普通调用
fun main() {
hello {
println("world")
}
}
fun hello(block: () -> Unit) {
println("hello")
block()
}
inline调用
fun main() {
hello {
println("world")
}
}
inline fun hello(block: () -> Unit) {
println("hello")
block()
}
编译后等价于
fun main() {
println("hello")
println("world")
}
noinline
fun main() {
hello {
println("world")
}
}
inline fun hello(noinline block: () -> Unit) {
println("hello")
block()
}
编译后等价于
fun main() {
println("hello")
({
println("world")
}).invoke()
}
crossinline
- 局部加强内联优化
- 被crossinline修饰的lambda参数,不能使用return
不使用crossinline
fun main() {
println("1")
hello {
println("world")
return
}
println("2")
}
inline fun hello(block: () -> Unit) {
println("hello")
block()
}
编译后等价于
fun main() {
println("1")
println("hello")
println("world")
return
println("2")
}
使用crossinline
fun main() {
println("1")
hello {
println("world")
}
println("2")
}
inline fun hello(crossinline block: () -> Unit) {
println("hello")
block()
}
|