繁体   English   中英

if-else块中的大括号

[英]Curly braces in if-else blocks

我用java编程,我碰巧发现自己:

if(nodo == null) return null;
    else if(nodo.izquierda!=null && nodo.derecha==null)
        return nodo.izquierda;
    else if(nodo.izquierda==null && nodo.derecha!=null)
        return nodo.derecha;
    else return null; // si ambos hijos son nulos o no nulos

我的问题是:将它写成:

if(nodo == null) 
    return null;
else {
    if(nodo.izquierda!=null && nodo.derecha==null)
        return nodo.izquierda;
    else {
        if(nodo.izquierda==null && nodo.derecha!=null)
              return nodo.derecha;
        else return null; // si ambos hijos son nulos o no nulos
    }
 }

最重要的是我对如何使用if-else块的花括号感到困惑。 使用花括号是必要的吗?

例如:

if (something)
     if (something else)
     ...
     else (blah blah)

是这样的:

if (something)
{
     if (something else)
     ...
     else (blah blah)
}

例如:

 if (something) if (something else) ... else (blah blah) 

是这样的:

  if (something) { if (something else) ... else (blah blah) } 

在这种情况下,是的,它们是相同的,但前者比后者更难阅读。 我建议总是使用大括号,即使是由单行组成的代码块。

  • 最后两个语句执行相同的操作; 省略括号是合法的,但不建议使用。

  • 如果else if省略括号,则else if始终属于最内层的 if语句。

    参考:如果大括号被省略,则链接到IF ELSE行为
  • 此URL: 使用大括号的代码研究链接包含分析结果,并指出代码中省略“if语句”大括号的项目更有可能存在错误。
  • 如果开发人员故意省略大括号(这是合法的),那么下一个开发人员在没有大括号的情况下查看代码将不得不在心理上“解析”其他所有其他if并将else if与最接近的if语句匹配。 ifelse ifelse匹配, if就更容易匹配缩进对齐的大括号。
  • 当顶级if语句中的大括号内的代码缩进4个空格时,代码最容易读取,而第二级if语句中的代码缩进8个空格,如下所示:

     if (var1 == 1) { action1(); } else if (var1 == 2) { action2(); } else if (var1 == 3) { if (var2 == 1) { action31(); } else if (var2 == 2) { action32(); } } 

  • 对于Java,花括号对于if-else语句是可选的。 正如Jared所说,只有在省略花括号时才会执行下一个语句。

    通常,大括号有助于代码的组织和可读性,因此通常会使用它们。

    我的问题是:将它写成:

    您需要询问的事实是使用大括号的一个非常好的理由。 代码,编译器和任何可能需要阅读和推理代码的人,包括您自己的未来自我,总会有两个受众。

    通常,编译器不需要大括号,但增强了其他受众的可读性。

    if(nodo != null)
        if(nodo.izquierda != null && nodo.derecha == null)
            return nodo.izquierda;
        else if(nodo.izquierda == null && nodo.derecha != null)
            return nodo.derecha;
    return null;
    

    暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM