Wer hat entschieden (und basierend auf welchen Konzepten), dass die switch
Konstruktion (in vielen Sprachen) break
in 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 switch
ist 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, break
dass 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 break
ist 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 break
ist ein Syntaxfehler ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
break
irgendwo vorhanden ist" ist eine wesentlich einfachere Regel als "Einen Sprung nicht ausgeben, wenn er fallthrough
in a vorhanden ist switch
".
CASE
Anweisung gleichwertig mit einem riesigen if / elseif-Block.