Kotlin常用内联函数的手写和解释

1、什么是内联函数

使用inline关键字修饰的函数被称为内联函数,其作用是在编译阶段将函数体的代码直接嵌入到函数调用处,而不是通过函数调用的方式来执行,这样可减少函数调用带来的额外开销,如传递参数,创建和销毁栈帧等, 可以使代码更加简洁直观。

2、Kotlin中常见的内联函数

**apply:**该函数参数中lambda体持有当前调用者对象this,返回结果为本身即obj.适合链式调用场景。

使用方式:

obj.apply{//持有this

///lambda执行代码块

}.apply{

///lambda执行代码块

}...

**run:**该函数参数中lambda体持有当前调用者对象this,返回结果为lambda表达式执行返回的结果.

使用方式:

obj.run{//持有this

///lambda执行代码块,最后一行的返回值就是run函数的返回值

}

**let:**该函数的调用者作为函数体唯一参数,故参数中lambda体持有it,返回结果为lambda表达式执行返回的结果

使用方式:

obj.let{//持有it

//lambda执行代码块,最后一行的返回值为let函数的返回值

}

**also:**函数参数中的lambda体持有it,返回结果为当前调用对象,因此也适合链式调用。

使用方式:

obj.also{//持有it

///lambda执行代码块

}.also{//持有it

///lambda执行代码块

}

**with:**该函数的lambda体也是持有this,函数的返回结果为lambda表达式执行返回的结果,作用类似于run函数,只是调用方式不同

使用方式:

with(obj) {

//lambda执行代码块

}

3、手写内联函数

内联函数的实现实际上使kotlin高阶函数的一个运用场景,参数中都包含lambda表达式。所谓高阶函数就是函数的参数或者返回值类型为函数的函数。以下为上面五个内联的函数的手写实现,跟源码差不多。

手写apply

inline fun <T> T.myApply(lambda:T.()->Unit):T {

lambda()

return this

}

手写run

inline fun <T, R> T.myRun(lambda:T.()->R):R{

return lambda()

}

手写let

inline fun <T, R> T.myLet(lambda:(T)->R):R {

return lambda(this)

}

手写also

inline fun <T> T.myAlso(lambda:(T)->Unit):T{

lambda(this)

return this

}

手写with

inline fun <T, R> myWith(receiver:T, lambda:T.()->R):R {

return receiver.lambda()

}

注意:apply\run\let\also是对泛型函数的扩展,即任何类型的对象都可以直接调用,而with为一个普通的高阶函数,使用方式与其他四个不一样。

相关推荐
阿巴斯甜7 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker7 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95278 小时前
Andorid Google 登录接入文档
android
黄林晴10 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android