if-else vs. ternary operator vs. switch

In der heutigen Folge beschäftigen wir uns mit dem Thema "Bedingungen". Wann ist es sinnvoll welches Konstrukt zu benutzen, welches Konstrukt erhöht die Lesbarkeit des Quellcodes.

if/else vs. ternary operator vs. switch

Der "Ternäre Operator"

Der ternary operator(ternäre Operator) bietet sich immer dann an, wenn die gesamte Bedingung, inkl. der beiden Alternativen sich noch übersichtlich in einer Zeile unterbringen lässt, oder er als Teil einer Ausgabe verwendet wird.

  1. <?php
  2.  
  3. // Erste Version
  4. ($Zahl < 1) ? echo 'Kleiner 1' : echo 'Groesser oder gleich 1';
  5. // Zweite Version
  6. echo (($Zahl < 1) ? 'Kleiner' : 'Groesser oder gleich') . ' 1';
  7. // Dies ist unuebersichtlich:
  8. ($Zahl < 1 || $Zahl == 0.24 || $Tag == 'Dienstag' || $Die_Antwort_auf_alle_Fragen == 42) ? echo 'Hier dann eine ganz lange Ausgabe, die verhindert, dass die Zeile sich innerhalb der üblichen Bildschirmbreiten anzeigen lässt' : echo 'Nix';  
  9.  
  10. ?>

if-else-Vergleich

Der Vergleich mit einem If-Else-Konstrukt wird benutzt, wenn innerhalt des jeweiligen Astes mehrere Operationen durchgeführt werden sollen, oder aber wenn es nur eine If-Bedingung gibt. Dies erhöht die Übersichtlichkeit ungemein, erst recht wenn man darauf verzichtet, eine einfache If-Bedingung in eine Zeile zu quetschen:

  1. <?php
  2.  
  3. // Sehr unuebersichtlich:
  4. if ($Zahl < 1) echo 'Kleiner 1';
  5.  
  6. // Viel strukturierter:
  7. if ($Zahl < 1) {
  8. 	echo 'Kleiner 1';
  9. }
  10.  
  11. // Eine typisches If-Else-Konstrukt
  12. if ($Zahl < 1) {
  13. 	// Aktion 1
  14. 	// Aktion 2
  15. 	// ...
  16. } else {
  17. 	// Aktion 1
  18. 	// Aktion 2
  19. 	// ...
  20. }
  21.  
  22. ?>

Es gibt nur wenige Gründe, warum man mehr als zwei Verzweigungsäste in einem solchen Konstrukt haben sollte. Nur wenn mehrere Bedingungen überprüft werden sollen, inklusive deren Kombinationen, ist eine If-ElseIf-If-Konstruktion nötig:

  1. <?php
  2.  
  3. if ($Zahl < 1 && $Tag == 'Montag') {
  4. 	// Aktion 1
  5. } elseif ($Zahl < 1 /*Tag nicht prüfen*/) {
  6. 	// Aktion 2 
  7. } else {
  8. 	// Aktion 3
  9. }
  10.  
  11. ?>

switch

Eine switch-Anweisung verdeutlicht die logische Struktur eines Quelltextes viel besser, als eine lange If-Else-Verschachtelung:

  1. <?php
  2. switch ($Zahl) {
  3. 	case 0:
  4. 		// Aktion 1
  5. 		// Aktion 2
  6. 		break;
  7. 	case 1:
  8. 		// Aktion 1
  9. 		// Aktion 2
  10. 		break;
  11. 	case 2:
  12. 		// Aktion 1
  13. 		// Aktion 2
  14. 		break;
  15. 	case 3:
  16. 		// Aktion 1
  17. 		// Aktion 2
  18. 		break;
  19. 	default:
  20. 		// Falls nichts anderes greift...
  21. 		break;
  22. }
  23.  
  24. // Hier die If-Else-Variante:
  25.  
  26. if ($Zahl == 0) {
  27. 	// Aktion 1
  28. 	// Aktion 2
  29. } elseif ($Zahl == 1) {
  30. 	// Aktion 1
  31. 	// Aktion 2
  32. } elseif ($Zahl == 2) {
  33. 	// Aktion 1
  34. 	// Aktion 2
  35. } elseif ($Zahl == 3) {
  36. 	// Aktion 1
  37. 	// Aktion 2
  38. } else {
  39. 	// Falls nichts anderes greift...
  40. }
  41.  
  42. ?>

Ein switch-Block rückt die Bedingungen sehr deutlich ins Blickfeld und ermöglicht es, diese schneller zu erfassen.

Neuen Kommentar schreiben

Plain text

  • Keine HTML-Tags erlaubt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.