假设我有这样的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/