這可能聽起來像一個愚蠢的問題,我猶豫要發佈它,但仍然如下: 如果某些事情只需要在某種條件下運行,哪種效率更高:if-> return vs if-> else效率
A.
if (condition) {
// do
// things...
}
B.
if (!condition) { return; }
// do
// things...
這可能聽起來像一個愚蠢的問題,我猶豫要發佈它,但仍然如下: 如果某些事情只需要在某種條件下運行,哪種效率更高:if-> return vs if-> else效率
A.
if (condition) {
// do
// things...
}
B.
if (!condition) { return; }
// do
// things...
真正的疑問句重刑是。你真的應該關心嗎?
我說不!具有更好的可讀代碼比做微型優化更重要。
請選擇最具可讀性的東西。這個級別的性能優化幾乎不是問題。即使真正對性能敏感的框架部分(如.NET框架)也不會從這種微觀優化中受益。
它們同樣有效,但B通常被認爲具有更好的可讀性,特別是在用於消除多個嵌套條件時。
儘管我同意你應該首先選擇可讀性,但我會繼續並添加一些信息:在C#中,沒有區別。它編譯爲相同的東西(當通過構建發佈模式進行優化時)。其他語言?誰知道,我相信他們中的一些人認爲它是不同的,但是實際上你需要關心它的機會是微乎其微的。
這是一種風格的東西。表演不相關;兩者都產生幾乎相同的機器碼。
風格上有幾個方面的考慮:
如果你想避免「水平編程」,你可能希望傾向於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";
}
....
}
但不同的是最小如果你問我。絕對不值得一場「代碼式戰爭」。
您是否測量了這個?你發現了什麼? – Steven 2012-02-13 20:38:51
這是一種風格的東西。表演不相關;兩者都產生幾乎相同的機器碼。如果你想避免'橫向編程',你可能想要B來避免嵌套條件。 – 2012-02-13 20:40:06
如果您有類似問題,請查看http://jsperf.com/。非常有用的網站! – mrtsherman 2012-02-13 20:40:32