我听说,当您希望使用安全调用运算符?.
对对象执行null安全操作时,会使用let。(据此(但问题是为什么这样:
fun main() {
var s: String? = null
s = s?.let{ it.toUpperCase() }
println(s)
}
优先于此:
fun main() {
var s: String? = null
s = s?.toUpperCase()
println(s)
}
在我看来,第二个变体更容易阅读和理解,这使得让变得无用。
那么let函数的目的是什么呢?
?.let()
并不比简单的?.toUpperCase()
更受欢迎。但我们不能总是使用后者,最重要的是,我们经常需要调用另一个对象的函数:
s?.let { parse(it) }
file?.let { FileInputStream(it) }
此外,我个人有时更喜欢?.let()
,如果有一个长的调用链,并且null只存在于它的开头。我觉得?.let()
在代码清晰度方面更好:
post?.let { it.author.personalInfo.address.street }
代替:
post?.author?.personalInfo?.address?.street