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. 如何简化此代码?
- 4. 我该如何简化此代码
- 5. 如何使用Typescript简化此代码?
- 6. 如何在VB.NET中简化此代码
- 7. 如何清理并简化此代码?
- 8. 如何简化此C#代码?
- 9. 我想简化并修改此代码
- 10. 如何简化此密码
- 11. 如何简化此MemoryStream码
- 12. 任何简化此代码的方法?
- 13. 我想知道如何简化此代码
- 14. 我该如何简化这些代码?
- 15. 如何简化我的代码?
- 16. 如何简化我的代码?
- 17. 如何简化我的jQuery代码
- 18. 如何简化我的bash代码?
- 19. 如何简化我的请求代码?
- 20. 如何简化我的代码?
- 21. 如何简化我的模型代码?
- 22. 如何让我的代码更简化?
- 23. jquery - - 我如何简化代码
- 24. 如何简化我的Java代码?
- 25. 如何优化此代码?
- 26. 如何优化此代码?
- 27. 如何优化此代码?
- 28. 如何优化此代码?
- 29. 如何优化此代码?
- 30. 如何优化此代码
什么是您的简化标准?使用更多&& ?? –
“简化”以何种方式?这可能属于http://codereview.stackexchange.com –