如果使用可空布尔值和猫王运算符检查失败,为什么?



我在Android Studio中写了以下函数:

if (startTimes.value?.containsKey(name)?:false) {
return startTimes?.value?.get(name)
}

Android Studio用警告信息Equality check should be used instead of elvis for nullable boolean check突出显示if的内容,并建议将其替换为:

if (startTimes.value?.containsKey(name) == true) {
return startTimes?.value?.get(name)
}

为什么第二个是IDE的首选?据我所知,它们在逻辑上是相同的。

检查truefalse的可空布尔值是一个"官方的";芬兰湾的科特林成语:

Nullable布尔

val b: Boolean? = ... 
if (b == true) {
... 
} else {
// `b` is false or null 
}

下面是关于这个成语的相关讨论,包括赞成和反对的意见。

第一步分为两步。它进行空检查,然后计算出一个值。第二个语句直接求值

就我个人而言,我认为第二种情况更容易推理。

"是x还是else如果x为空则为假,为真?">

"

除此之外,还有一些编译器试图强加给你的习惯用法,我认为这是为了使代码更容易读。如果大多数人使用相同的习惯用法,就更容易阅读彼此的代码。

最新更新