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)
}

For example:

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

Is the same that:

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

在这种情况下,是的,它们是相同的,但前者比后者更难阅读。我建议始终使用大括号,即使对于由一行组成的代码块也是如此。

  • 最后2条语句执行相同;省略大括号是合法的,但不建议这样做。

  • 如果 else if 省略大括号,else if 总是属于 innermost if 语句.

    REFERENCE: Link to the IF ELSE behavior if braces are Omitted
  • 此 URL: Link to Study of Code with Braces Omitted 包含分析结果,并指出使用代码省略 "if statements" 大括号的项目更有可能出现错误。
  • 如果开发人员故意省略大括号(这是合法的),则下一个查看没有大括号的代码的开发人员将不得不在心理上 "parse" 其他如果并且将 else if 匹配到最接近的 if 语句。 当有缩进对齐的大括号时,将 if 匹配到 else ifelse 会容易得多。
  • 当顶级 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 所说,当省略花括号时,只会执行下一条语句。

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

    My question is: Is it the same to write that as:

    您需要询问的事实是使用牙套的一个很好的理由。代码总是有两种受众,一种是编译器,一种是可能需要阅读和推理代码的任何人,包括你未来的自己。

    通常,大括号对于编译器来说是不必要的,但可以提高其他读者的可读性。

    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;