欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kotlin inline & noinline & crossinline

程序员文章站 2024-03-21 17:20:22
...

inline & noinline & crossinline

inline

  • Kotlin对函数进行内联的支持
  • inline可以让你使用内联,即将函数内容直插到调用处,优化代码结构,减少函数类型的对象的创建

普通调用

fun main() {
    hello {
        println("world")
    }
}

fun hello(block: () -> Unit) {
    println("hello")
    block()
}

//hello
//world

inline调用

fun main() {
    hello {
        println("world")
    }
}

inline fun hello(block: () -> Unit) {
    println("hello")
    block()
}

//hello
//world

编译后等价于

fun main() {
    println("hello")
    println("world")
}

noinline

  • 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()
}

//1
//hello
//world

编译后等价于

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()
}