以下哪項是構建If
統計信息嵌套的更好方法。構建「If」語句的更好方法
if (x && y)
doXY();
else if (x)
doX();
else if (y)
doY();
(OR)
if(x)
if(y)
doXY();
else
doX();
else if(Y)
doY();
以下哪項是構建If
統計信息嵌套的更好方法。構建「If」語句的更好方法
if (x && y)
doXY();
else if (x)
doX();
else if (y)
doY();
(OR)
if(x)
if(y)
doXY();
else
doX();
else if(Y)
doY();
可讀性,聰明的我肯定會用第一個選項去。
但是,如果這是執行數百萬次的某種邏輯的一部分,並且您知道x & y爲真的概率分佈與僅x爲真或僅y爲真的概率分佈有利於後者之一,爲了表現,您可能想犧牲可讀性。然而,確保你跳到這樣的優化之前,你的配置文件,並確保你記錄這樣的if語句的結構化的原因,所以其他開發人員不會只是進來你贊成通過重構你的代碼。
我第一個想到的是可讀性以及以及結構性
另一種可能性:
if (x && y)
doXY();
if (x && !y)
doX();
if (!x && y)
doY();
這是 - 我聲明瞭前面 - 效率較低,但這種微小的程度,它會未落關係。從可讀性和可維護性的角度來看,在某些情況下可能會更好,因爲沒有任何條款依賴於其他條款,也沒有要求按照指定的順序執行條款。如果需要,每個單獨的子句可以被提取到它自己的方法中。
第二和第三條if語句中的冗餘檢查。如果它被重寫爲:if(x)doX()AND if(y)doY()。它可以獲得相同的結果,而不需要進行冗餘檢查。 – Woot4Moo 2010-10-06 15:47:39
@ Woot4Moo:我討厭將邏輯運算符用作「if」語句。我覺得很多人都有這種感覺。 – 2010-10-06 15:58:53
DoXY中的操作是否與Actions DoX()和DoY()相互排斥?即:你能重新工作的行動像這樣的工作:
if (x) { DoX(); }
if (y) { DoY(); }
if (X && y) { DoXY(); }
也許甚至是)Paramters以強力黴素(
if (X || y) { DoXY(x,y); }
但我可能會與你的選擇爲第一個去可讀性...
你也可以做到以下幾點:
switch (x + (y<<1))
{
case 1: doX(); break;
case 2: doY(); break;
case 3: doXY(); break;
}
Discla imer:請注意,這不是更快,更好的可讀性,只是一種替代方案,在極少數情況下這可能是一個可接受的解決方案。
這是一個甜蜜的黑客。 – rkg 2010-10-06 16:06:20
聰明的最高分,可讀性最低的分數 – 2010-10-06 16:08:12
1.)正如kyndigs所說,少嵌套是一個好習慣。
2.)另一個好的建議是用括號{ }
包圍運算符塊,不管是否只有一個被調用的方法或更多。
3.)總是儘量簡化你的「if」語句。我的意思是if (isTrue)
優於if (!(!isNotFalse))
我會寫上面的代碼中這樣說:
if (x && y) {
doXY();
}
else if (x) {
doX();
}
else if (y) {
doY();
}
這真的取決於形勢(即其中之一,而閱讀似乎更自然)。 – strager 2010-10-06 15:37:44
does doXY()碰巧讀{doX(); doY()}?如果是這樣,你只需要兩種情況... – atk 2010-10-06 15:59:47
@atk:不,他們處理完全不同的功能。 – rkg 2010-10-06 16:04:16