2009-10-07 3 views
1

Pourquoi utiliser des instructions if-else si vous pouvez faire une autre instruction if?Pourquoi utiliser if-else si en C++?

Exemple avec plusieurs ifs:

input = getInputFromUser() 
if input is "Hello" 
    greet() 

if input is "Bye" 
    sayGoodbye() 

if input is "Hey" 
    sayHi() 

Exemple avec les autres, si:

input = getInputFromUser() 
if input is "Hello" 
    greet() 

else if input is "Bye" 
    sayGoodbye() 

else if input is "Hey" 
    sayHi() 
+16

j'étais « else » sous l'impression que les questions reliées à la programmation ont été permis ici, * quel que soit le niveau qu'ils étaient à *. Cela peut sembler une question fondamentale pour beaucoup d'entre nous, mais je ne vois pas pourquoi c'est considéré comme «pas une vraie question». – paxdiablo

+0

@litb - moins de mots-clés, mais des conditions plus complexes - les conditions doivent exclure explicitement ce que l'autre aurait exclu pour vous. En supposant que ce soit approprié, vous obtiendriez plus de mots, de chiffres et de symboles au total. – Steve314

+2

Non seulement cela, mais si cela fait la même chose dépend de ce que vous exécutez en tant que corps de la première branche. Vous pouvez changer les variables de condition ... Je pense qu'il est courant de retourner les drapeaux utilisés dans la condition, par exemple –

Répondre

8

vous dire comme ceci:

if (a == true && b == false && c == 1 && d == 0) { 
    // run if true 
} 

if (a == false || b == true || c != 1 || d != 0) { 
    // else 
} 

Un autre-déclaration serait beaucoup plus claire et plus facile à maintenir.

+1

Et moins sujet aux erreurs. Vos deux énoncés ne sont pas parfaitement opposés - vous devez changer '&&' en '||' dans le second. –

+5

Enfin, vous demandez au processeur de faire deux fois le même travail. –

+0

@Chris Lutz, a trouvé l'erreur et l'a réparée en même temps que vous :-) –

7

Si vous devez choisir exactement une action d'un ensemble donné d'actions, selon certaines conditions, le choix naturel et le plus clair est soit l'interrupteur (ne pas oublier de casser après chaque branche) ou la combinaison de si et autre. Lorsque j'écris

if (conditon1) 
{ 
    action1(); 
} 
else if (condition2) 
{ 
    action2(); 
} 
else if (conditon3) 
{ 
    action3(); 
} 
. 
. 
. 
else { 
    action_n(); 
} 

il est clair pour le lecteur que l'une des actions doit être effectuée. Et il n'y a aucune possibilité qu'en raison d'une erreur dans les conditions plus d'une action est effectuée.

13

Il est aussi plus performant.

Dans votre premier exemple, tous les seront vérifiés, même si l'entrée est "Bonjour". Donc, vous avez tous les trois contrôles.

Dans votre deuxième exemple, l'exécution s'arrêtera une fois qu'il a trouvé une branche, donc si les types d'utilisateurs « Bonjour » ce sera un seul chèque au lieu de trois.

La différence ne peut pas être beaucoup dans votre exemple simple, mais imaginez que vous exécuter une fonction potentiellement coûteuse et vous pouvez voir la différence.

14

Si vous avez des conditions non exclusives:

if(a < 100) 
{...} 
else if (a < 200) 
{...} 
else if (a < 300) 
.... 

ce qui est très différent du même code, sans les s ...

Questions connexes