Меня попросили оптимизировать этот код во время недавнего собеседования.
Вот версия кода, которую я придумал:
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
»"- когда не удается выполнить какое-либо условие.