Pouvez-vous faire des hypothèses sur x, y, z, q? e.G. juste l'un d'eux peut être vrai. Que vous pouvez le voir en tant qu'Etat
enum State {
X{
void doSomething(){
doItTheXWay();
}
},
Y{
void doSomething(){
doItTheYWay();
}
},
Z{
void doSomething(){
doItTheZWay();
}
},
Q{
void doSomething(){
doItTheQWay();
}
};
void doSomething(){
}
}
et dans votre code où vous avez utilisé l'instruction if
vous pouvez attribuer un état et faire juste la bonne chose
State state = getAState();
state.doSomething();
Si vous n'aime pas les enums L'état pourrait être une interface et X à Q pourrait être l'implémentation de classes. Les avantages dans ce cas sont dans l'utilisation multiple de la même construction sinon. Dites quelques lignes de code vous plus tard commencer par
if(x)
do_the_next_thing_with_X();
...
ou vous pouvez simplement prolonger votre ENUM avec une autre fonction et faire un seul appel
state.doTheNextThing();
@Thirler Hmm, qui vaincra le but de court-circuit évaluation. Je pense qu'en supposant une probabilité et une complexité temporelle égales de x, y, z et q, cela représenterait une amélioration des performances. Mais que faire si la probabilité de z est de 50% et prend peu de traitement alors que la probabilité de q est de 1% et qu'il faut 95% de la puissance de traitement? Voyez comment la micro-optimisation peut vous causer des problèmes sans paramètres appropriés? –
Oui, nous devons utiliser au plus une variable pour faire cette vérification – Halo
@Tim Vous avez besoin de conditions extrêmement longues (ou du code qui est exécuté des millions de fois) pour que cela soit un drain de performance.Je n'optimise certainement pas (la question n'en parle pas), je suggère d'améliorer la maintenabilité. Si les performances sont importantes, vous devrez tamponner le résultat du calcul de façon transparente (le cacher derrière une fonction qui stocke le résultat). Notez que l'exemple donné exécute deux fois certaines conditions. Mais une bonne règle n'est pas d'optimiser du tout jusqu'à ce que vous voyiez qu'il faut beaucoup de temps pour s'exécuter. – Thirler