Re: Warum eigentlich 'break' in 'case' ??
Hallo Markuss,
Warum ist Java nicht so gestaltet, dass nach Ausführen eines
'case' automatisch der 'switch' verlassen wird?
Mir ist kein Fall bekannt, wo man das 'break' bewusst
weglässt, damit er ins nächste 'case' hineinläuft.
Einzige sinnvolle Möglichkeit: Für einen Dominoeffekt mit
beliebiger Einbstiegsstelle. Aber das wäre ein seltener Fall.
Warum dreht man nicht den Spieß um und sagt: Am Ende eines
'case' wird der 'switch' automatisch verlassen, es sei denn,
ein spezielles Schlüsselwort steht dort (z.B. 'next').
Dadurch würden doch weniger Fehler und weniger Quellcodezeilen
entstehen, oder?
Antwort A:
Weil Java hier von C abgekupfert hat, dort ist das auch so.
Antwort B:
1. Der Compiler/Interpreter wird etwas einfacher "case x" ist einfach eine Sprungmarke, damit ist das Handling für den Compiler/Interpreter abgeschlossen. In deinem Fall müsste man zuerst abchecken ob da vorher schon ein case-Zweig war oder nicht um dann einen Sprung an das Ende einzufügen.
2. Wie willst du folgendes Handhaben:
switch ( x)
{
case 1:
case 2: mach_da_was;
break;
case 3: mach_was_anderes;
}
Bei deiner Variante müsste man die Syntax erweitern um die Werte "1" und "2" in einem einzigen "case" zusammenzufassen.
3. Es giebt viele sinnvole Anwendungen für das "fallthru", hinzu kommt noch, dass es nicht übersichtlicher wird, wenn ein "Pseudobefehl" bewirkt, dass der Programmfluss eigentlich "nicht beeinflusst" wird.
z.B. bei einem Commandointerpreter ist das ganz nützlich:
switch (c)
{
case 'a': c = tooupper(c);
case 'A': execute_befehl_A();
break;
case 'b': c = tooupper(c);
case 'B': execute_befehl_B();
break;
case 'c': execute_befehl_c();
break;
case 'c': execute_befehl_C();
break;
}
MfG Peter(TOO)