首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kotlin避免在`let`中深度嵌套`let`

kotlin避免在`let`中深度嵌套`let`
EN

Stack Overflow用户
提问于 2020-01-29 20:11:03
回答 4查看 791关注 0票数 0

有没有办法避免下一步的构造?一种检查null而不向代码添加校正的方法?我的意思是像if (variableOne == null) return一样,但是又酷又酷的koltin风格?

代码语言:javascript
复制
variableOne?.let{
    // ....

    variableTwo?.let {
        // ...

        variableThree?.let {
            // ...

        }
    }
}
EN

回答 4

Stack Overflow用户

发布于 2020-01-29 20:39:38

使用局部变量和智能转换。

代码语言:javascript
复制
val lVariable1 = variable1
val lVariable2 = variable2
val lVariable3 = variable3
if (lVariable1 != null &&
        lVariable2 != null &&
        lVariable3 != null) {
    // Use local variables here
}
票数 2
EN

Stack Overflow用户

发布于 2020-01-29 22:21:04

使用普通的旧if statements__,它是由核心的kotlin团队成员推荐的,所以在你的例子中

代码语言:javascript
复制
if(variableOne != null && variableTwo != null && variableThree != null){
    //Do something
}

以下是来自Kotlin in Action的相关文本

当您需要检查多个值是否为null时,可以使用嵌套的let调用来处理它们。,但在大多数情况下,这样的代码最终会相当冗长,很难理解。通常,使用正则if表达式一起检查所有值会更容易。

票数 1
EN

Stack Overflow用户

发布于 2020-01-29 20:34:36

不,没有很棒的方法(直到有多个接收器的函数被添加到Kotlin中)。有两个选项可以避免这种回调地狱:

  1. Use if (variableOne == null) return a helper function如下所示:

代码语言:javascript
复制
fun <A : Any, B : Any, C : Any> runIfNotNull(a: A?, b: B?, c: C?, block: (A, B, C) -> 
Unit) {
    if (a != null && b != null && c != null) block(a, b, c)
}

所以你可以这样使用它:

代码语言:javascript
复制
runIfNotNull(nullableOne, nullableTwo, nullableThree) { notNullOne, notNullTwo, notNullThree ->
    doSomething(notNullOne, notNullTwo, notNullThree)
}

而且你必须为你需要的每一个参数创建类似的函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59966834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档