2015-05-13 62 views
2

我在Java編程和我偶然發現自己有這樣的:大括號中的if-else塊

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

「if」語句不需要大括號。如果它們不存在,則如果該子句爲真,則將使用下一個參數和僅下一個參數。您的其他陳述也是如此。如果沒有括號,那麼只有下一個語句是else子句的一部分,沒有別的將被視爲你的'if ... else ...'語句的一部分。 – Jared

+0

大括號用於封裝代碼塊。使用正確縮進的括號通常是一個好主意,以便讀者清楚哪些代碼屬於哪裏。不使用大括號表示單行,如果語句可能引起2或3字節保存的自豪感,但是我發現它是導致代碼中引入錯誤的最簡單方法之一,因爲小型打字錯誤可以很容易地改變邏輯量。 –

回答

5

例如:

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語句。當存在縮進對齊的大括號時,將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

    對於Java,花括號是可選的if-else語句。正如Jared所說,只有在省略大括號時纔會執行下一個語句。

    一般來說,大括號有助於組織和代碼的可讀性,所以它們通常會被使用。

    0

    我的問題是:是不是寫的一樣,作爲:

    ,你需要問的其實是個很好的理由來使用大括號。總是有兩個代碼對象,一個編譯器和任何需要閱讀和推理代碼的人,包括你自己的未來自己。

    通常,編譯器不需要大括號,但可以提高其他讀者的可讀性。

    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; 
    
    +0

    儘管這段代碼可以解決這個問題,但是[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)這個問題如何以及爲什麼會解決這個問題,這真的有助於提高你的帖子的質量,並可能導致更多的選票。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人。請編輯您的答案以添加解釋,並指出適用的限制和假設。 – Makyen