Ist es immer möglich eine If(-Else)-Anweisung in eine Switch-Anweisung zu transformieren und bzw. oder umgekehrt?!
Meine Ideen:
Also ich bin bislang bei dem Schluss, dass es immer möglich ist IF in SWITCH (abgekürzt geschrieben...) zu transformieren, sofern die Variable bei SWITCH gültig ist (=> char, byte, short, int) , da die if bzw. if-else, bzw. else Anweisungen einfach zu case1, case2 etc. sowie default umgeschrieben werden können.
Von SWITCH nach IF jedoch würde ich sagen, dass es nicht immer möglich ist, da der sog. "Fallthrough" in IF so nicht umsetzbar ist.
IF bietet insgesamt mehr Flexibilität und hat auch einen anderen Anwendungsbereich als switch. Bei SWITCH kann man nur 1 Kriterium nehmen, bei IF sind sogar ganze Ausdrücke möglich (z.B. Funktionen als Bedingung).
Zitat:
da der sog. "Fallthrough" in IF so nicht umsetzbar ist.
Normalerweise möchte man auch keinen Fallthrough und ich empfehle dir auch ohne dieses "Feature" zu programmieren, da schnell Fehler auftreten.
IF(-ELSE) -> SWITCH:
Ist nur möglich wenn die if-Anweisung sehr simple Bedingungen hat wie Zahlen vergleichen o.ä.
code:
1:
2:
3:
4:
5:
6:
7:
if (n==0) {
foo();
} else if (n==2) {
bar();
} else {
foobar();
}
wird zu
code:
1:
2:
3:
4:
5:
6:
7:
8:
switch (n) {
case 0: foo();
break;
case 2: bar();
break;
default: foobar();
break;
}
(Hier könnte man die letzte break-Anweisung weglassen, da default normalerweise ganz unten steht (wegen Fallthrough)).
SWITCH -> IF(-ELSE):
Immer möglich. Du schreibst dass man hier keinen Fallthrough hat. Das stimmt, aber diese sollte ohnehin vermieden werden! Der Fallthrouth ist meiner Meinung nach ein Fehler unsauberer Programmierung.
In anderen Worten: Anders als du schreibst ist eine Umschreibung von SWITCH -> IF(-ELSE) immer möglich, solange du den Fallthrough nicht "willst".
MfG
22.07.2010 19:46
Groeten unregistriert
Hey Kapitän...
Ganz großes Danke für deine Erklärung!
Ist echt genial und beantwortet all meine Fragen!!!
Grüße
PS: Bzgl. d. "Fallthrough": Würde den auch nicht direkt benutzen; bezieht sich hierbei auch nur auf reine, universitäre Theorie...