2012-02-13 218 views
14

這可能聽起來像一個愚蠢的問題,我猶豫要發佈它,但仍然如下: 如果某些事情只需要在某種條件下運行,哪種效率更高:if-> return vs if-> else效率

A.

if (condition) { 
    // do 
    // things... 
} 

B.

if (!condition) { return; } 
// do 
// things... 
+1

您是否測量了這個?你發現了什麼? – Steven 2012-02-13 20:38:51

+8

這是一種風格的東西。表演不相關;兩者都產生幾乎相同的機器碼。如果你想避免'橫向編程',你可能想要B來避免嵌套條件。 – 2012-02-13 20:40:06

+0

如果您有類似問題,請查看http://jsperf.com/。非常有用的網站! – mrtsherman 2012-02-13 20:40:32

回答

6

真正的疑問句重刑是。你真的應該關心嗎?

我說不!具有更好的可讀代碼比做微型優化更重要。

9

請選擇最具可讀性的東西。這個級別的性能優化幾乎不是問題。即使真正對性能敏感的框架部分(如.NET框架)也不會從這種微觀優化中受益。

12

它們同樣有效,但B通常被認爲具有更好的可讀性,特別是在用於消除多個嵌套條件時。

2

儘管我同意你應該首先選擇可讀性,但我會繼續並添加一些信息:在C#中,沒有區別。它編譯爲相同的東西(當通過構建發佈模式進行優化時)。其他語言?誰知道,我相信他們中的一些人認爲它是不同的,但是實際上你需要關心它的機會是微乎其微的。

4

這是一種風格的東西。表演不相關;兩者都產生幾乎相同的機器碼。

風格上有幾個方面的考慮:

如果你想避免「水平編程」,你可能希望傾向於B到避免嵌套條件。例如,如果你想在不影響該方法的流程過多添加例外:

一個

public String getDescription(MyObject obj) { 
    if (obj == null) { 
     return ""; 
    } else { 
     if (!obj.isValid()) { 
      return "invalid"; 
     } else { 
      ... 
     } 
    } 
} 

public String getDescription(MyObject obj) { 
    if (obj == null) { 
     return ""; 
    } 

    if (!obj.isValid()) { 
     return "invalid"; 
    } 

    .... 
} 

但不同的是最小如果你問我。絕對不值得一場「代碼式戰爭」。