Wer hat entschieden (und basierend auf welchen Konzepten), dass die switchKonstruktion (in vielen Sprachen) breakin jeder Anweisung verwendet werden muss?
Warum müssen wir so etwas schreiben:
switch(a)
{
case 1:
result = 'one';
break;
case 2:
result = 'two';
break;
default:
result = 'not determined';
break;
}
(Dies ist in PHP und JS aufgefallen. Es gibt wahrscheinlich viele andere Sprachen, die dies verwenden.)
Wenn switchist eine Alternative von if, warum können wir nicht die gleiche Konstruktion wie für verwenden if? Dh:
switch(a)
{
case 1:
{
result = 'one';
}
case 2:
{
result = 'two';
}
default:
{
result = 'not determined';
}
}
Es wird gesagt, breakdass die Ausführung des Blocks nach dem aktuellen verhindert wird. Aber ist jemand wirklich in die Situation geraten, in der die Ausführung des aktuellen und der folgenden Blöcke erforderlich war? Habe ich nicht. Für mich breakist immer da. In jedem Block. In jedem Code.
case 'a': case 'A': case 'b': case 'B'aber meistens gemacht weil ich das nicht kann case in [ 'a', 'A', 'b', 'B' ]. Eine etwas bessere Frage ist, dass in meiner derzeit bevorzugten Sprache (C #) die Unterbrechung obligatorisch ist und es keinen impliziten Sturz gibt. Vergessen breakist ein Syntaxfehler ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
breakirgendwo vorhanden ist" ist eine wesentlich einfachere Regel als "Einen Sprung nicht ausgeben, wenn er fallthroughin a vorhanden ist switch".
CASEAnweisung gleichwertig mit einem riesigen if / elseif-Block.