kotlin Standard中的内联函数示例详解中的内联函数示例详解
let、、with、、run、、apply、、also、、takeIf、、takeUnless、、repeat函数的使用函数的使用
kotlin Standard.kt文件中,提供了一些内联函数,这些内联函数可以减少代码量,在使代码优美的同时,打打提高开发效率。它们分别为:
run、、with、、let、、also、、apply
let
let函数的定义如下:
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
默认当前这个对象作为闭包的it参数,函数接受一个lambda函数块返回值是函数里面最后一行,或者指定return
let函数的一般结构为:
obj.let {
it.todo//it指代obj对象实例
...
}
//在需要判断obj是否为null时
obj?.let {
it.todo//it指代obj对象实例
...
}
使用实例:初始化user
val user = User()
val result= user.let {
it.account = "12306"
it.address = "粤海街道"
it.address
}
println(result)
//运行结果
>>粤海街道
适用场景:
用let函数处理需要针对一个可null的对象统一做判空处理
明确一个变量所在特定作用域的范围
with
with函数的定义如下:
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
with函数不是以扩展函数的形式存在,它是将对象作为参数,在函数块内通过this指代该对象。with函数是接收了两个参数,分别为对象receiver和一个lambda函数块,返回值为函数
块的最后一行或指定return表达式。
with的一般结构为:
with(obj){
this.todo
todo//this可省略
...
}
使用实例:将地址影射到UI上
with(user){
tView.text = address
}
适用范围:
适用于调用一个类的多个方法,可以省去对象名直接调用方法(例如将数据影射到ui上时)
run
run函数的定义如下:
public inline fun <T, R> T.run(block: T.() -> R): R = block()
run函数接受一个lambda函数块,以闭包的形式返回函数块的最后一行或指定return表达式。观察函数的定义可以发现,run函数为一个扩展函数,而其接受的参数和with函数第二个参
数相同,run函数可以理解为let函数和with函数的结合体。
run函数的一般结构为:
obj.run {
this.todo
todo//this可省略
...
}
使用实例:将地址影射到UI上
user.run {
tView.text = address
}
适用范围:
适用于let和run函数的场景,run函数相较于let函数省去了必须适用it指代参数的麻烦,相较于with函数弥补了对象判空的问题
also
also函数的定义如下:
评论0
最新资源