Ho iniziato con la seguente, semplice routine:
void originalCode(){
boolean status = getStatus();
function2(status);
if(status){
return;
}
function3();
}
Tuttavia, è richiesta una funzionalità aggiuntiva per chiamare function1
sul percorso status == true
. Era anche importante chiamare function1
prima di function2
.
I risultati erano una delle due seguenti mostruosità:
void alternative1(){
boolean status = getStatus();
if(status){
function1();
}
function2(status);
if(status){
return;
}
function3();
}
o
void alternative2(){
boolean status = getStatus();
if(status){
function1();
function2(status);
return;
}
function2(status);
function3();
}
Entrambi hanno la duplicazione del codice e, in generale, non sembrano giusti.
Ora, nel mio caso particolare, function3
non è richiesto per essere chiamato dopo function2
, quindi ho optato per quanto segue:
void niceAlternative(){
boolean status = getStatus();
if(status){
function1();
}else{
function3();
}
function2(status);
}
Ma se non fosse un'opzione - cioè. se function2
doveva essere chiamato prima di function3
? E in generale, come si struttura il codice con più percorsi di esecuzione che hanno un aspetto comune nel medio ?