最近一直在学习 Kotlin,并将《Kotlin in Action》这本书看完了,这篇文章来记录一下我对 inline 关键字使用场景的一些困惑。
为什么困惑
学习完 Kotlin 以后最想干的一件事当然是练手,于是自己就开始参考 GitHub 上的多个项目封装自己的 Kotlin 扩展函数。在翻阅了很多项目之后,发现项目中对于 inline 关键字用法的差别,有的项目中所有的方法都使用了 inline 关键字修饰,有的项目则只有在一些方法上使用了 inline 关键字。这时候我就有点懵逼了,对于刚刚上手的我该按照那个库的标准来呢?(如果你还不清楚 inline 关键字请先阅读 内联函数 )。
何时使用
inline 的工作原理就是将内联函数的函数体复制到调用处实现内联。所以如果我们的方法比较大或者调用的比较多的话,那么编译器生成的代码量就会变大。所以呢在通过各种谷歌之后终于让我找到了一个还算比较权威的说法。在kotlin-style-guide这个仓库的 issue 中找到了来自 Kotlin 贡献者的建议,原话:「Functions should only be made inline when they use inline-only features like inlined lambda parameters or reified types.」意思是:inline 关键字应该只用在需要内联特性的函数中,比如高阶函数作为参数和具体化的类型参数时。
根据上面说的,我也阅读了 Kotlin 标准库中 _Strings.kt
和 _Collections.kt
中扩展函数的写法,发现大部分都遵循了上面的约定,当然也有特殊的方法,但是非常少。所以我们也遵循上面的约定来使用 inline 关键字吧!
参考