if-else块中的大括号

时间:2015-05-13 19:56:10

标签: java if-statement curly-braces

我正在用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)
}

5 个答案:

答案 0 :(得分:6)

  

例如:

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

与:

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

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

答案 1 :(得分:2)

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

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

    REFERENCE: Link to the IF ELSE behavior if braces are Omitted
  • 此网址:Link to Study of Code with Braces Omitted 包含分析结果,并说明代码中省略了大括号的项目" if语句"更容易出错。
  • 如果开发人员故意省略大括号(这是合法的),那么下一个没有大括号查看代码的开发人员就必须在心理上解析"解析"其他每个if if和if if匹配最接近的if语句。当有大括号缩进对齐时,ifelse 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();
        }
    }
    

  • 答案 2 :(得分:2)

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

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

    答案 3 :(得分:0)

      

    我的问题是:将它写成:

    是否相同

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

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

    答案 4 :(得分:0)

    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;