I am replacing all the null checks with let block in my code as part of a code review process.

1. Code example with null check:

if(someValue != null){//run if someValue is not null}
else {//run if someValue is null}

2. Code base after using let-run block if for null check,

var someValue : String? = null
someValue = "SOF"

someValue?.let {safeSomeValue->
//This code block will run only if someValue is not null
}?.run {
//This code block should run only when if someValue is null, like else condition
}

现在,let run块的问题是,即使someValue不为null,两个代码块都在运行.所以我无法复制代码示例1中if-else条件的行为来运行代码示例2中的let条件.

预期行为是根据值是NULL还是非NULL来执行LET或运行代码挡路.

推荐答案

资料来源:Kotlin 朗.组织

  • ?. 执行安全调用(如果接收方非空,则调用方法或访问属性)
  • ?: 如果左侧值为空,则取右侧值(elvis运算符)

?.改为?:可以解决这个问题,

代码库如下所示,将基于空判断运行let或run block.

var someValue : String? = null
someValue = "SOF"

someValue?.let {safeSomeValue->
//This code block will run only if someValue is not null
}?:run {
//This code block will run only when if someValue is null, like else condition
}

Kotlin相关问答推荐

只能在元素区域中点击的Jetpack Compose列

Jetpack Compose Material3和Material2 Slider onValueChangeFinded()的行为不同

Mockk:对同一函数进行两次存根会忽略第一个行为

通过快捷键手动砍掉功能参数等

在kotlin中匹配多个变量

Kotlin:我可以将函数分配给 main 的伴随对象中的变量吗?

如果带注释的成员未被特定块包围,则发出 IDE 警告

具有泛型类型的 Kotlin 密封接口不会为其子类型推断约束

PRDownloader 即使在实现库后也无法工作.未知参考:Android Studio 中的 PRDownloader

Kotlin:伴随对象内的函数扩展

如何使用 Findbugs 避免 kotlin 文件

如何使 TextInputEditText 只读?

如何在MVVM架构中观察RecyclerView适配器中的LiveData?

什么是开放式property?为什么我不能将其设置器设为private私有?

Firestore - 如何在 Kotlin 中排除数据类对象的字段

Kotlin:如何修改成对的值?

如何获取Kotlin中变量的名称?

Dagger +Kotlin 不注入

如何将 CameraView 与 Jetpack Compose 一起使用?

如何在不绑定ViewModel(MVVM)中的UI的情况下使用android导航?