let 函数是 Kotlin 的标准函数,它提供了函数式 API 的编程接口,并将原始对象作为参数传递到 Lambda 表达式中。
格式如下:
obj.let { obj ->
// 具体的执行代码
}
示意说明:调用了 obj 对象的 let 函数,然后 obj 对象本身作为参数传入 Lambda 表达式,执行具体的代码逻辑。
接前文的判空辅助工具 ?.
,配合 let
函数使用,效果好极了。
如下代码,
fun testString(string: String?){
println(string?.length)
println(string?.startsWith("A"))
}
翻译过来,其实是这样的,受制于 ?.
操作符的限制,判空执行了两次,
fun testString(string: String?){
if (string != null){
println(string.length)
}
if (string != null){
println(string.startsWith("a"))
}
}
其实,只判空一次就够了,
fun testString2(string: String?){
if (string != null){
println(string.length)
println(string.startsWith("a"))
}
}
这样的话, ?.
操作符又用不上了。
那就结合 let
函数使用 ?.
操作符吧,
fun testString(string: String?){
string?.let { str ->
println(str.length)
println(str.startsWith("a"))
}
}
意思是:string 不为空时执行 let 函数的函数体;string 如果不为空,string 作为参数传入 let 函数体,str 就是 string 。
回顾下 Lambda 表达式规则,如果 Lambda 表达式参数列表只有一个参数,不必声明参数名,可以用 it 关键字代替 。
简化为,
fun testString4(string: String?){
string?.let {
println(it.length)
println(it.startsWith("a"))
}
}
这样,就完成了。