si può fare alcune ipotesi circa x, y, z, q? e.G. solo uno di loro può essere vero. Di quanto si potrebbe vederlo come uno Stato
enum State {
X{
void doSomething(){
doItTheXWay();
}
},
Y{
void doSomething(){
doItTheYWay();
}
},
Z{
void doSomething(){
doItTheZWay();
}
},
Q{
void doSomething(){
doItTheQWay();
}
};
void doSomething(){
}
}
e nel codice in cui è stato utilizzato l'istruzioni if
è possibile assegnare uno stato e basta fare la cosa giusta
State state = getAState();
state.doSomething();
Nel caso in cui non mi piace lo stato enumerazione potrebbe essere un'interfaccia e X a Q potrebbe essere l'implementazione di classi. I vantaggi in questo caso sono nell'uso multiplo dello stesso se altro costrutto. Dicono alcuni codeline tardi si sarebbe cominciare con
if(x)
do_the_next_thing_with_X();
...
o si può solo estendere la vostra enum con un'altra funzione ed effettuare una singola chiamata
state.doTheNextThing();
@Thirler Hmm, che sconfiggerà lo scopo del cortocircuito valutazione. Penso che in media assumendo uguale probabilità e complessità temporale di x, y, z e q questo sarebbe un aumento delle prestazioni. Ma cosa succede se la probabilità di z è del 50% e richiede poca elaborazione mentre la probabilità di q è dell'1% e richiede il 95% della potenza di elaborazione? Scopri come la micro-ottimizzazione può metterti nei guai senza un'adeguata metrica? –
sì, abbiamo bisogno di utilizzare al massimo una variabile per fare ciò controllo – Halo
@Tim Hai bisogno di condizioni estremamente lunghe (o codice che viene eseguito milioni di volte) per questo è un drenaggio delle prestazioni.Non sto certamente ottimizzando (la domanda non ne parla), sto suggerendo di migliorare la manutenibilità. Se le prestazioni sono importanti, è necessario memorizzare in modo trasparente il risultato del calcolo (nasconderlo dietro una funzione che memorizza il risultato). Si noti che l'esempio fornito esegue alcune condizioni due volte. Ma una buona regola non è quella di ottimizzare affatto finché non si vede che ci vuole molto tempo per l'esecuzione. – Thirler