Kotlin的Standard Library提供了几种拓展函数(extension function),有的可以更优雅处理可空变量问题。
相信在学习 Kotlin 时,一定都会注意到它有许多let
apply
run
等这些 extension function,它们看起来大同小异,用起来似乎也经常可以相互替换,稍做修改就让程式依照正确的逻辑执行。
function | identifier | return |
---|---|---|
Let | it | 最后一行 |
run | This | 最后一行 |
also | it | this |
apply | this | this |
常用
T.let
T是什么?
在Kotlin extension function中需要接在一个变数后面才行。像是 someVariable.run { /* do something */ }
,包含 T.run 下面四个 let also apply 都属于这种 extension function。因为 run有两种用法,这里为了避免混淆而将 T 写出来。
T.let 默认当前这个对象作为闭包的it参数,返回值是函数里面最后一行,或者指定return@let
private var name: String? = null
@JvmStatic
fun main(args: Array<String>?) {
name = let {
return@let "wazing"
}
name?.let {
println("my name is $it")
}
}
结果: my name is wazing
name.let{}
如果name为null,let{}
中的程式码还是会被执行,只不过此时it
为null
;name?.let{}
如果 name为null,let{}
中的程式码不会执行;T
在 scope 内则是用it
来存取而不是this
。也可以依照需求改成其他的名字,增加可读性;T.let{}
会作为下一个扩展函数或者回传给之前的变数。
Run
@JvmStatic
fun main(args: Array<String>?) {
val name: String = run {
val sb = StringBuilder()
return@run sb.let {
sb ->
sb.append("wa")
}.apply {
append(<