Was ist der Vorteil von einem Switch Case gegenüber else/else if?

6 Antworten

Grundlegend wird bei einer if else verzweigung entweder der if ODER der else zweig ausgeführt und das ganze statement dann in Ruhe gelassen.

Bei einem Switch Case werden so viele Fälle ausgeführt wie eben zutreffen, es sei denn es steht in einem Case der ausgeführt wird ein "break;" drin oder der default-Case wird ausgeführt.

Woher ich das weiß:Hobby – Beschäftige mich täglich mit PCs

Schachpapa  20.10.2021, 13:32

Vorsicht!

switch (zahl) {
  case 1: print("Zahl ist eins");
  case 2: print("zahl ist zwei");
}

Gibt bei 1 beide Sätze aus, weil das break fehlt. Hat also nichts mit zutreffen zu tun. Der case-Fall ist nur ein Einsprungspunkt. Mir fällt momentan kein sinnvolles Beispiel ein, bei dem das Weglassen des break vernünftig wäre und das man nicht besser (=leserlicher) formulieren könnte.

0

Ein Switch-Case ist kompakter und übersichtlicher, wenn du eine Variable mit vielen Werten vergleichen willst und aufgrund dessen spezifische Aktionen ausführen willst.

$a = "Haus";
switch($a) {
  case "Haus":
    print("Ich bin ein Haus");
    break;
  case "Baum":
    print("Ich bin ein Baum");
    break;
  default:
    print("Was bin ich?");
}

In einem normalen if-else würde dies so aussehen:

$a = "Haus";
if ($a == "Haus") {
  print("Ich bin ein Haus");
} else if ($a == "Baum") {
  print("Ich bin ein Baum");
} else {
  print("Was bin ich?");
}

(Ich weiss, dieses Beispiel geht auch noch effizienter, was anderes ist mir grad nicht eingefallen)

Wenn da nun noch mehr verschiedene Werte dazukommen, wird das in der if-else schnell unübersichtlich.

Ebenfalls haben Switches die Möglichkeit, für mehrere Fälle dieselbe Aktion auszuführen:

$a = "Haus";
switch($a) {
  case "Haus":
  case "Baum":
    print("Ich bin ein Haus oder ein Baum");
    break;
  default:
    print("Was bin ich?");
}

In einem if-else sieht dies so aus:

$a = "Haus";
if ($a == "Haus" || $a == "Baum") {
  print("Ich bin ein Haus oder ein Baum");
} else {
  print("Was bin ich?");
}

Wie du siehst, ist das if-else zwar kürzer, aber um einiges unübersichtlicher.

Woher ich das weiß:Berufserfahrung – Informatiker Applikationsentwicklung

Bei switch case vergleichst du einen Wert mit einer Reihe von Möglichkeiten und wählst die entsprechende Aktion. Bei einer if-Kaskade kannst du die Bedingungen evtl komplexer wählen:

switch (zahl) {
 case 1:
 case 2: print("Zahl ist 1 oder 2"); break
 case 4: print("Vier");break
 default: print("Weder 1 noch 2 noch 4");
}

if (zahl == 1 || zahl == 2) 
  print("Zahl ist 1 oder 2"); 
else if (zahl == 4) 
  print("Vier");
else if (zahl%7 == 0) 
  print("zahl ist durch 7 teilbar");
else if (30 <= zahl && zahl <= 100)
  print("Zahl zwischen 30 und 100");
else
  print("Nix besonderes"); 

Beachte, dass dann nur die erste zutreffende Möglichkeit gewählt wird. Wenn mehrere Bedingungen zutreffen können (z.B. 35 ist durch 7 teilbar und liegt zwischen 30 und 100), macht man es ohne else.

Und: switch funktioniert nicht für float und double.

Ein Switch Case ist im Grunde ein schöneres else if.

if (i == 0)
  //bla
else if (i == 1)
  //bla
else if (i == 2)
  //bla
else if (i == 3)
  //bla
else if (i == 4)
  //bla

vs.

Switch (i)
{
  case 0:
  case 1:
  case 2:
  //bla
  break;
  case 3:
  case 4:
  //bla
  break;
}

Klar würde man das if else nochmal anders aufbauen, wenn man es wie im Switch verwenden will aber so ist es schneller aufzubauen und einfach übersichtlicher.

Nachteil des Switch Cases ist, dass er statisch ist. Ich kann nur den Wert auf eine Sache überprüfen. Im If kann ich auf mehrere Sachen gleichzeitig überprüfen.

Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer im IT-Consulting

Bei vielen Fällen einfach übersichtlicher.