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为一个普通的高阶函数,使用方式与其他四个不一样。

相关推荐
欧先生^_^4 分钟前
Rust 编程语言的官方源码仓库
开发语言·算法·rust
蓝瓶电液6 分钟前
星际争霸小程序:用Java实现策略模式的星际大战
java·开发语言·策略模式
fashia9 分钟前
Java转Go日记(三十九):Gorm查询
开发语言·后端·golang·go
nukix9 分钟前
Android Studio Kotlin 中的方法添加灰色参数提示
android·kotlin·android studio
飞露9 分钟前
android studio clone子分支
android·ide·android studio
吴胜ws10 分钟前
Android Studio 中 build、assemble、assembleDebug 和 assembleRelease 构建 aar 的区别
android·ide·android studio
tangweiguo0305198715 分钟前
Android SwitchButton 使用详解:一个实际项目的完美实践
android
无奇不有 不置可否29 分钟前
Java中的设计模式
java·开发语言·设计模式
金融数据出海38 分钟前
使用PHP对接东南亚、日本、印度和印度尼西亚股票数据源
android·开发语言·php
@Turbo@1 小时前
【QT】一个界面中嵌入其它界面(二)
开发语言·数据库·qt