Вот некоторые ответы и объяснения относительно того, как они работают в бэк-энде (понимание того, ПОЧЕМУ будет полезно для вас в долгосрочной перспективе)
Один простой ответ состоит в том, чтобы использовать else
перед каждым из следующих if
утверждений, таких как
public void Method()
{
if (flagIsUp)
{
if (x == 1)
//code here;
else if (y == 2)
//code here;
else if (z == 3)
//code here;
}
if (buttonPressed)
{
//code here;
}
}
Как это работает после компиляции, больше похоже на
public void Method()
{
if (flagIsUp)
{
if (x == 1)
{
//code here;
// Excecution skips to 'x==1 fastforward'
}
else
{
if (y == 2) // intentional indentation
{
//code here;
// Excecution skips to 'y==1 fastforward'
}
else
{
if (z == 3) // intentional indentation
{
//code here;
}
} // y==2 fast forward
} // x==1 fast forward
}
if (buttonPressed)
{
code here;
}
}
Эта схема показывает, как подпрограммы if In if if "indent" внутри условного выражения. Если A истинно, тогда код B и C будет пропущен все вместе. Если A ложно, а B верно, C пропускается. Если A и B ложны, проверяется C.
Еще один способ сделать это - поместить эту проверку в собственный закрытый метод и возвращать его при выполнении истинного условия
public void Method()
{
if (flagIsUp)
DoFlagUpCheck();
if (buttonPressed)
{
//code here;
}
}
private void DoFlagUpCheck()
{
if (x == 1)
{
//code here;
return; // Stop and return to Method()
}
if (y == 2)
{
//code here;
return; // Stop and return to Method()
}
if (z == 3)
{
//code here;
return; // Stop and return to Method()
}
}
Таким образом, выполнение кода останавливается и возвращается из метода при первом истинном условии. Если A истинно, введите код и вернитесь, в противном случае переходите к B ...
Стоит рассмотреть одну вещь: можно ли реорганизовать программу так, чтобы X, Y и Z могли быть представлены в одном перечислении? Так как x==1
, y==2
и z==3
являются взаимоисключающими, может быть способ сделать этот набор условий более читабельным и в конечном итоге получить что-то более похожее на
public Method()
{
if (flagIsUp)
{
switch(flagCondition)
{
case FlagX:
//code here;
break;
case FlagY:
//code here;
break;
case FlagZ:
//Code here;
break;
}
}
if (buttonPressed)
{
//code here;
}
}
И, наконец, для производительности часто полезно сначала разместить наиболее вероятное истинное условие.