有没有办法在kotlin中为多个可变变量链接多个let?
fun example(first: String?, second: String?) {
first?.let {
second?.let {
// Do something just if both are != null
}
}
}
我的意思是,像这样:
fun example(first: String?, second: String?) {
first?.let && second?.let {
// Do something just if both are != null
}
}
5 回答
以下是一些变体,具体取决于您要使用的样式,如果您拥有相同或不同类型的所有内容,以及列表未知数量的项目...
混合类型,全部不能为null以计算新值
对于混合类型,您可以为每个参数计数构建一系列函数,这些函数可能看起来很傻,但对于混合类型可以很好地工作:
用法示例:
当list没有空项时执行代码块
这里有两种风格,第一种是当列表包含所有非空项时执行代码块,第二种是在列表至少有一个非空项时执行相同的代码 . 两种情况都会将非空项列表传递给代码块:
功能:
用法示例:
稍微更改一下,让函数接收项目列表并执行相同的操作:
用法示例:
可以将这些变体更改为具有
let()
之类的返回值 .使用第一个非空项(Coalesce)
与SQL Coalesce函数类似,返回第一个非null项 . 两种口味的功能:
用法示例:
其他变化
......还有其他变化,但更多的规格可以缩小范围 .
你可以为此编写自己的函数:
根据Kotlin的各种
*NotNull
和*OrNull
函数的精神,你可以创建一个arrayOfNotNullOrNull
函数,如果所有变量都不是null
和null
,你可以从"multiple nullable variables"创建一个数组:然后,您可以使用
let
将其用于可变数量的值:如果您已经在集合中拥有可以为空的值,则可以创建类似于kotlin.collections.requireNoNulls的
noNullsOrNull
扩展函数,但返回null
而不是抛出异常 .实际上,你可以简单地做到这一点,你知道吗? ;)
在Kotlin中使用正常的空值检查没有错 .
对于每个查看代码的人来说,它的可读性更高 .
对于仅检查两个值而不必使用列表的情况:
用法示例: