Supondo que todas as funções sejam implementadas no mesmo componente, você pode fazer com que as funções retenham algum estado para se livrar das múltiplas ramificações no fluxo.
EG: checkCondition1()
se tornaria evaluateCondition1()
, no qual ele verificaria se a condição anterior foi atendida; Em caso afirmativo, ele armazena em cache algum valor a ser recuperado por getConditionNumber()
.
checkCondition2()
se tornaria evaluateCondition2()
, no qual verificaria se as condições anteriores foram atendidas. Se a condição anterior não foi atendida, ela verifica o cenário de condição 2, armazenando em cache um valor a ser recuperado por getConditionNumber()
. E assim por diante.
clearConditions();
evaluateCondition1();
evaluateCondition2();
evaluateCondition3();
evaluateCondition4();
if (anyCondition()) { addAlert(getConditionNumber()); }
EDITAR:
Veja como a verificação de condições caras precisaria ser implementada para que essa abordagem funcione.
bool evaluateCondition34() {
if (!anyCondition() && A && B && C) {
conditionNumber = 5693;
return true;
}
return false;
}
...
bool evaluateCondition76() {
if (!anyCondition() && !B && C && D) {
conditionNumber = 7658;
return true;
}
return false;
}
Portanto, se você tiver muitas verificações dispendiosas a serem realizadas e as coisas nesse código permanecerem particulares, essa abordagem ajudará a mantê-las, permitindo alterar a ordem das verificações, se necessário.
clearConditions();
evaluateCondition10();
evaluateCondition9();
evaluateCondition8();
evaluateCondition7();
...
evaluateCondition34();
...
evaluateCondition76();
if (anyCondition()) { addAlert(getConditionNumber()); }
Esta resposta apenas fornece alguma sugestão alternativa das outras respostas, e provavelmente não será melhor do que o código original se considerarmos apenas 4 linhas de código. Embora, este não seja um abordagem terrível (e nem dificulta a manutenção como outros já disseram) dado o cenário que mencionei (muitas verificações, apenas a principal função exposta como pública, todas as funções são detalhes de implementação do mesmo classe).