2017-08-13 3 views
1

Donc, ma question concerne essentiellement une instruction switch. PourquoiPourquoi ces deux instructions sont-elles équivalentes

switch (foo) { 
    case 1: case 2: 
     bar(); 
     break; 
} 

le même que:

if (foo == 1 || foo == 2) { 
    bar(); 
} 

Il me semble qu'avec l'instruction switch, le code en cas 1 exécuterait, et le code dans le cas 2 serait ignoré. S'il vous plaît, expliquez-moi pourquoi ce n'est pas le cas.

+0

Quelle langue y ou se référant à ici? Veuillez ajouter l'étiquette appropriée. –

+0

Avez-vous cherché comment fonctionnent les interrupteurs? Dans chaque langue que je connais, chaque cas n'est * pas * exécuté séparément à moins d'être séparé par un «break». "cas 1" "tombe" dans "cas 2". – Carcigenicate

+0

En supposant que Java, allez ici et recherchez la page pour "tomber à travers": https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – Carcigenicate

Répondre

0

Lors de l'évaluation case instructions, le code fall through jusqu'à ce que le bloc est terminé (généralement par une instruction break). Ainsi, la sémantique du premier extrait sont les suivantes:

  • Si foo est 2, exécuter bar() puis briser.
  • Si foo est 1, exécutez le bloc suivant case 1:, qui est vide (c.-à-rien), puis continuer (passer à travers) au bloc suivant case 2:, détaillée dans le point précédent
  • Pour toute autre valeur, ne rien faire (puisqu'il n'y a pas case blocs correspondants.

comme vous pouvez le voir, ce qui est équivalent d'exécuter bar() en cas foo est 1 ou 2.

0

L'instruction break; est entièrement responsable de la rupture du bloc de code de commutateur.

Une instruction switch sans instruction break; s'exécutera dans un ordre très étrange.

switch (2) { 
    case 2: 
     alert("hello"); 
    case 3: 
     alert("goodbye"); 
     break; 
    case 4: 
     alert("will never show"); 
    } 

instructions switch JavaScript: https://www.w3schools.com/js/js_switch.asp

0

Ajouter break; à la fin de chaque déclaration de cas pour arrêter un cas d'exécuter alors tout en dessous. Sinon, il tombe à travers.