kotlin - 问:检查Kotlin中变量是否为null的惯用方式

标签 kotlin

假设我有这样的Kotlin代码:

val var1:String? = isVar1Present() 
val var2:String? = isVar2Present()
val var3:String? = isVar3Present()

   
if ((var1!=null)||(var2!=null)||(var3!=null)) {
//do something complex only if at least one of var is not null and do it only one time
}
如何在Kotlin中使其更具意识形态性?如果它是一个var-这将是简单的var1?.let { ... } ,但我这里有3个。
我也想过
    if (listOf(var1, var2, var3)
            .filterNotNull()
            .isNotEmpty( ) { 
                //do something complex 
             }
但它看起来很疯狂(但很短,尤其是在真实代码中不是isVarNPresent而是很长的行,例如isVar1Present=varmanager.getStatusOfVar(varmanager.var1)(因此,上面的示例将使用其他映射步骤)

最佳答案

有一个略短的版本:

if (var1 ?: var2 ?: var3 != null) { … }
(这是有效的,因为var1 ?: var2 ?: var3给出找到的第一个非null值,或者仅在所有三个变量都为null时才为null。)
这要短一些,并且可以说是惯用的,但不那么明显,特别是对于非 Kotlin 专家而言。根据可能阅读代码的人,可能值得坚持使用更简单,更易于理解的版本(如Animesh所建议的,删除括号):
if (var1 != null || var2 != null || var3 != null) { … }
或者,如果需要在块内使用第一个非空值,则可以使用:
(var1 ?: var2 ?: var3)?.let { … }
在这种情况下,习惯用法较少的替代方案将更长,因此该构造更加合理。

关于kotlin - 问:检查Kotlin中变量是否为null的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63216343/

相关文章:

kotlin - Kotlin 协程如何比 RxKotlin 更好?

Android VideoView 及时跳转

android - 如何使用 Koin 对 MVVM 进行单元测试?

kotlin - 使用jOOQ DAO删除带有复合键的记录

android - 使用 Dagger 2 提供函数依赖

java - 垂直滑动手指即可打开 fragment

gradle - 无法在Kotlin中使用扩展的类型参数编译扩展功能

android - 如何使用 Retrofit 和 Kotlin 协程下载 PDF 文件?

android - 为什么kotlin中只有val类型的对象才有组件函数?

android - 如何在可组合函数回调中调用 Kotlin 协程?