Qui a décidé (et sur quels concepts) que la switchconstruction (dans de nombreuses langues) doit utiliser breakdans chaque énoncé?
Pourquoi devons-nous écrire quelque chose comme ceci:
switch(a)
{
case 1:
result = 'one';
break;
case 2:
result = 'two';
break;
default:
result = 'not determined';
break;
}
(remarqué cela en PHP et JS; il y a probablement beaucoup d'autres langages qui l'utilisent)
Si switchest une alternative de if, pourquoi nous ne pouvons pas utiliser la même construction que pour if? C'est à dire:
switch(a)
{
case 1:
{
result = 'one';
}
case 2:
{
result = 'two';
}
default:
{
result = 'not determined';
}
}
On dit que cela breakempêche l'exécution du bloc suivant celui en cours. Mais, est-ce que quelqu'un se heurte réellement à la situation, où il était nécessaire d'exécuter le bloc actuel et les suivants? Je n'ai pas Pour moi, breakc'est toujours là. Dans chaque bloc. Dans chaque code.
case 'a': case 'A': case 'b': case 'B'mais surtout parce que je ne peux pas faire case in [ 'a', 'A', 'b', 'B' ]. Une question légèrement meilleure est, dans mon langage préféré actuel (C #), la pause est obligatoire et il n’ya pas de chute implicite; l'oubli breakest une erreur de syntaxe ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
breakest présent n'importe où» est une règle beaucoup plus simple à appliquer que «Ne pas émettre de saut si fallthroughest présent dans un switch».
CASEinstruction de manière équivalente à un bloc géant if / elseif.