Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kotlin避免“let”在“let”内部的深层嵌套`_Kotlin_Coding Style - Fatal编程技术网

kotlin避免“let”在“let”内部的深层嵌套`

kotlin避免“let”在“let”内部的深层嵌套`,kotlin,coding-style,Kotlin,Coding Style,有没有办法避免下一步施工?一种在不向代码添加意图的情况下检查null的方法?我的意思是像if(variableOne==null)一样返回,但是以酷炫的koltin风格 variableOne?.let{ // .... variableTwo?.let { // ... variableThree?.let { // ... } } } 不,没有什么好办法(直到Kotlin中添加了具有多个接

有没有办法避免下一步施工?一种在不向代码添加意图的情况下检查null的方法?我的意思是像
if(variableOne==null)一样返回
,但是以酷炫的koltin风格

variableOne?.let{
    // ....

    variableTwo?.let {
        // ...

        variableThree?.let {
            // ...

        }
    }
}
不,没有什么好办法(直到Kotlin中添加了具有多个接收器的函数)。有两个选项可以避免此回调地狱:

  • 使用
    if(variableOne==null)return
    语句

  • 创建如下所示的帮助器函数:

  • runIfNotNull(nullableOne, nullableTwo, nullableThree) { notNullOne, notNullTwo, notNullThree ->
        doSomething(notNullOne, notNullTwo, notNullThree)
    }
    
    variableOne?.let {
        /* "it" refers to variableOne, 
           do some stuff with it */
    
        variableTwo
    }?.let {
        /* "it" refers to variableTwo,
           do some stuff with it */
    
        variableThree
    }?.let {
        /* "it" refers to variableThree,
           do some stuff with it  */
    }
    
    您必须为需要的每一个参数创建类似的函数。

    不,没有什么好办法(除非将具有多个接收器的函数添加到Kotlin中)。有两个选项可以避免此回调地狱:

  • 使用
    if(variableOne==null)return
    语句

  • 创建如下所示的帮助器函数:

  • runIfNotNull(nullableOne, nullableTwo, nullableThree) { notNullOne, notNullTwo, notNullThree ->
        doSomething(notNullOne, notNullTwo, notNullThree)
    }
    
    variableOne?.let {
        /* "it" refers to variableOne, 
           do some stuff with it */
    
        variableTwo
    }?.let {
        /* "it" refers to variableTwo,
           do some stuff with it */
    
        variableThree
    }?.let {
        /* "it" refers to variableThree,
           do some stuff with it  */
    }
    

    您必须为所需的每一个参数计数创建类似的函数。

    您可以尝试按如下方式链接它们:

    runIfNotNull(nullableOne, nullableTwo, nullableThree) { notNullOne, notNullTwo, notNullThree ->
        doSomething(notNullOne, notNullTwo, notNullThree)
    }
    
    variableOne?.let {
        /* "it" refers to variableOne, 
           do some stuff with it */
    
        variableTwo
    }?.let {
        /* "it" refers to variableTwo,
           do some stuff with it */
    
        variableThree
    }?.let {
        /* "it" refers to variableThree,
           do some stuff with it  */
    }
    

    您可以尝试如下方式链接它们:

    runIfNotNull(nullableOne, nullableTwo, nullableThree) { notNullOne, notNullTwo, notNullThree ->
        doSomething(notNullOne, notNullTwo, notNullThree)
    }
    
    variableOne?.let {
        /* "it" refers to variableOne, 
           do some stuff with it */
    
        variableTwo
    }?.let {
        /* "it" refers to variableTwo,
           do some stuff with it */
    
        variableThree
    }?.let {
        /* "it" refers to variableThree,
           do some stuff with it  */
    }
    

    使用局部变量和智能转换

    val lVariable1 = variable1
    val lVariable2 = variable2
    val lVariable3 = variable3
    if (lVariable1 != null &&
            lVariable2 != null &&
            lVariable3 != null) {
        // Use local variables here
    }
    

    使用局部变量和智能转换

    val lVariable1 = variable1
    val lVariable2 = variable2
    val lVariable3 = variable3
    if (lVariable1 != null &&
            lVariable2 != null &&
            lVariable3 != null) {
        // Use local variables here
    }
    
    使用普通的
    如果
    语句
    ,kotlin核心团队成员建议使用
    ,因此在您的情况下

    if(variableOne != null && variableTwo != null && variableThree != null){
        //Do something
    }
    
    以下是来自

    当需要检查多个值是否为null时,可以使用嵌套 让电话来处理它们但在大多数情况下,这样的代码最终都是公平的 冗长且难以理解。一般来说,使用常规的if更容易 表达式将所有值一起检查。

    使用普通的
    如果
    语句
    ,kotlin核心团队成员建议使用
    ,因此在您的情况下

    if(variableOne != null && variableTwo != null && variableThree != null){
        //Do something
    }
    
    以下是来自

    当需要检查多个值是否为null时,可以使用嵌套 让电话来处理它们但在大多数情况下,这样的代码最终都是公平的 冗长且难以理解。一般来说,使用常规的if更容易 表达式将所有值一起检查。


    恐怕没有比这更好的官方方式了。在kotlin讨论中已经讨论了很长时间:在该线程中有一些解决方案/想法。好吧,没有一种官方/更好的方法可以做到这一点。在kotlin讨论中已经讨论了很长时间:在该线程中有一些解决方案/想法。如果您使用的是var而不是val呢?聪明的演员不会work@PedroAGSantos这就是这些局部变量的作用。在大括号内,您可以使用智能强制转换的局部变量来读取值,但如果需要,您仍然可以写入读写成员属性。因此,您可以将它们设置为不可变以便能够进行智能强制转换您可以这样说,也可以将它们设置为局部以便能够进行智能强制转换。本地
    var
    s可以是智能强制转换,因为它们不会在本地范围之外被访问。如果您使用的是var而不是val呢?聪明的演员不会work@PedroAGSantos这就是这些局部变量的作用。在大括号内,您可以使用智能强制转换的局部变量来读取值,但如果需要,您仍然可以写入读写成员属性。因此,您可以将它们设置为不可变以便能够进行智能强制转换您可以这样说,也可以将它们设置为局部以便能够进行智能强制转换。本地
    var
    s可以是智能强制转换,因为它们不会在本地范围之外被访问。