kotlin十分简便系统为我们提供了一些十分简便的标准库扩展,今天我们就看看这些常规的使用频率比较高的能帮助我们加速开发的标准库吧
let
对于学习Kotlin这门语言的人来说肯定都知道其一个特点---安全,添加了null的数据类型比如var a? = null 那么现实开发中怎么去使用了检测这个null呢?不停的使用if判断显然是不合乎设计的,于是我么的let应运而生
The Kotlin standard library function let can be used for scoping and null-checks.
When called on an object, let executes the given block of code and
returns the result of its last expression.
The object is accessible inside the block by the reference it.
官方文档中说的很明了let是对标准库的一个扩展,是作为对null 检测的一个扩展
fun letFun() {
val empty = "test".let {
customPrint(it)
}
println("is empty: $empty")
fun printNonNull(str: String?) {
println("Printing \"$str\"")
str?.let {
print("\t")
customPrint(it)
println()
}
}
printNonNull(null)
printNonNull("my string")
}
在我们的测试打印中null 和 my string分别作为参数测试时null并没有走let这个闭包,从而可以看出let只有在非null的情况下才会走对应的闭包
run
和let相似,run是标准库的另一个扩展。对于基本的用法和let一样都是内部执行一个闭包并返回自身数据。不同的是run内部走的是一个this的引用,这要说明了内部你可以直接调用对已实例自身的方法
fun runFun() {
fun getNullableLengt(ns: String) {
println("for \"$ns\":")
ns.run {
println("\tis empty? " + this.isEmpty())
println("\tlenght =${this.length}")
}
}
}
上栗中我们直接使用this调用Sting对应打方法,当然从run的介绍可以看出this是完全可以省略的,我们只是为了让大家看的明显才吧对应的this添加进去而已