2014-09-23 52 views
2

有沒有更好的方法來編寫下面的代碼?我檢查一個對象是否爲null,如果是則返回false,否則我檢查另一個變量並根據該變量選擇要執行的操作。返回語句的Java最佳風格 - 內部或外部如果條件?

private boolean myFunction(MyObjectType myObject) { 
    if (myObject == null) { 
    return false; 
    } else if (myInstanceVariable.myMethod()) { 
    // Do something then return 
    System.out.println(myObject.getSomeValue()); 
    return true; 
    } else { 
    return false; 
    } 
} 

是更好地有最後的else語句或if語句之外將return false(以及其他任何我可能已經把之前的最後else { }塊的內部代碼)?我可以看到它更安全(和更少的代碼行)將其移到外面,以便函數100%保證返回。它可能取決於編譯器的行爲方式嗎?

private boolean myFunction(MyObjectType myObject) { 
    if (myObject == null) { 
    ... 
    } else if (myVariable.myMethod()) { 
    ... 
    } 
    return false; 
} 
+6

http://codereview.stackexchange.com/是最好的地方問這樣的問題 – sol4me 2014-09-23 19:23:52

+0

真棒謝謝! – user3553107 2014-09-23 19:25:41

+0

請注意,體面的IDE(如Eclipse或Netbeans)不允許您編寫不保證返回所需類型的代碼。而且他們非常聰明,可以確定你的if/else鏈是否總是返回結果。 – Bobulous 2014-09-23 19:28:50

回答

0

最好在最後的return語句在任何if語句之外。 最後我還記得,如果你所有的回報都在if語句中,你會得到一個編譯錯誤,說明該方法沒有返回值,或者返回可能不總是達到。

+0

你能解釋一下爲什麼它更好嗎? – Jesper 2014-09-23 19:37:16

+0

「如果你所有的回報都在裏面,如果陳述你會得到一個編譯錯誤」實際上並不是一個真實的陳述。如果代碼不會到達那些返回語句,您只會看到一個錯誤。此外,單一返回語句「更好」的原因在於,具有單個退出點的方法本質上比具有多個退出點的方法更清晰。然而,在實踐中,具有多個出口點的簡短方法很容易理解。 – MarsAtomic 2014-09-23 19:51:13

+0

@Jesper我認爲這取決於情況。例如,我在一個只包含if語句的方法中絕不會有幾個退出點,我會讓它返回一個變量,這個變量的值由if語句的結果決定,因爲它們是逐個檢查的。然而,如果方法包含一個循環,並且我希望它在不再需要循環時返回,那麼我會在它自己的if語句內部設置一個內部退出點(返回),以便同時退出循環和方法。 – ThaBomb 2014-09-24 14:24:22

0

對於我來說,這是更好的:

private boolean myFunction(MyObjectType myObject) { 
    if (myObject == null) { 
    return false; 
    } 
    if (myInstanceVariable.myMethod()) { 
    // Do something then return 
    System.out.println(myObject.getSomeValue()); 
    return true; 
    } 
    return false; 
} 

如果您是從if塊內返回,那麼你就需要一個else塊。我發現它更好,因爲邏輯的真實複雜性可以通過這種看起來不那麼複雜的方法更好地表達出來。至少對我來說,更少的括號和更少的縮進使得它更易於理解。