boolean f(boolean A, boolean B, boolean C, boolean D, boolean E)
{
if (A)
{
k();
if (B)
{
m();
if (C)
{
n();
if (D)
{
p();
if (E)
{
q();
return true;
}
else
{
r();
return false;
}
}
else
{
s();
return false;
}
}
else
{
t();
return false;
}
}
else
{
v();
return false;
}
}
else
{
w();
return false;
}
}
3
A
回答
3
大概只有通過評估一次以上的條件扁平化if
S:
if (A) k(); else w();
if (A && B) m(); else if(A && !B) v();
if (A && B && C) n(); else if (A && B && !C) t();
if (A && B && C && D) p(); else if (A && B && C && !D) s();
if (A && B && C && D && E) q(); else if (A && B && C && D && !E) r();
return (A && B && C && D && E);
3
不知道更多關於你正在解決這個問題,我將它改寫爲
boolean f(boolean A, boolean B, boolean C, boolean D, boolean E)
{
if (A) k();
if (A && B) m();
if (A && B && C) n();
if (A && B && C && D) p();
if (A && B && C && D && E) { q(); return true; }
if (A && B && C && D && !E) { r(); return false; }
if (A && B && C && !D) { s(); return false; }
if (A && B && !C) { t(); return false; }
if (A && !B) { v(); return false; }
if (!A) { w(); return false; }
}
這,在我看來,使它比較容易跟隨的場景。
但是,這仍然是非常可怕的。 你最可能想要的是某種算法模式,其中不同的行爲被強制爲實現相同接口的不同類,並且您將選擇基於多態性的行爲,或者將在對象創建期間注入算法。
基本上每個採用多個布爾參數的方法都是代碼異味。
0
如果該方法被調用的順序並不重要,那麼:
failedOnce = false
for ar as Array in [
(A, K, W)
(B, M, V)
(C, N, T)
(D, P, S)
(E, Q, R)
]:
if ar[0]:
ar[1].Invoke()
else:
ar[2].Invoke()
break
failedOnce = false
return not failedOnce
0
我被要求在最近的一次求職面試中優化這些代碼。
這裏的代碼版本,我想出了:
boolean f(boolean A, boolean B, boolean C, boolean D, boolean E)
{
boolean success = false;
// I use "==false" because it's more readable than "if !A"
if(A == false)
{
w();
} else {
if(B == false)
{
v();
} else {
m();
if(C == false)
{
n();
if(D == false)
{
s();
} else {
if(E == false)
{
r();
} else {
q();
success = true;
}
}
}
}
}
// this will be "false" in all cases except one
return (success);
}
我的我的答案背後的邏輯是試圖保持可讀性,同時降低「回報」的數量。
下面是答案招聘傢伙真的在尋找:
boolean f(Boolean A, Boolean B, Boolean C, Boolean D, Boolean E)
{
boolean result = false;
do
{
if (!A)
{
w();
break;
}
k();
if (!B)
{
v();
break;
}
m();
if (!C)
{
t();
break;
}
n();
if (!D)
{
s();
break;
}
p();
if (!E)
{
r();
break;
}
// All conditions satisfied
result = true;
} while (false);
return result;
}
這裏使用了老謀深算做一次且僅一次的循環,用的想法「break
」 -ing出來時,一些條件失敗。
相關問題
- 1. 如何簡化此代碼?
- 2. 如何簡化此代碼?
- 3. 如何簡化此C#代碼?
- 4. 如何使用Typescript簡化此代碼?
- 5. 如何在VB.NET中簡化此代碼
- 6. 如何清理並簡化此代碼?
- 7. 我想簡化並修改此代碼
- 8. 如何簡化此密碼
- 9. 如何簡化此MemoryStream碼
- 10. 任何簡化此代碼的方法?
- 11. 如何簡化我的Java代碼?
- 12. 我該如何簡化這些代碼?
- 13. jquery - - 我如何簡化代碼
- 14. 如何簡化我的模型代碼?
- 15. 如何簡化我的代碼?
- 16. 如何讓我的代碼更簡化?
- 17. 如何優化此代碼?
- 18. 如何優化此代碼?
- 19. 如何優化此代碼?
- 20. 如何優化此代碼
- 21. 如何優化此代碼?
- 22. 如何優化此代碼?
- 23. 如何優化此代碼?
- 24. 如何簡化代碼?
- 25. 如何簡化代碼?
- 26. 如何簡化php代碼?
- 27. 如何簡化CSS代碼
- 28. 我將如何驗證此Java代碼?
- 29. 有關如何簡化此代碼的任何建議?
- 30. 如何重構此代碼塊以簡化和動態?
什麼是您的簡化標準?使用更多&& ?? –
「簡化」以何種方式?這可能屬於http://codereview.stackexchange.com –