Der Martin: Ternärer Operator oder Schleifen

Beitrag lesen

Hallo,

Ist die Performance (u.A. Schnelligkeit) bei Ternären Operatoren gleich schnell oder gar schneller als bei "einfachen" Schleifen?

was hat der ternäre Operator (auch Auswahloperator genannt) mit Schleifen zu tun? Das sind zwei völlig verschiedene Themen.

einfache Schreibweise

if ($shown_pages < 3) {

$shown_pages = 3;
} elseif ($shown_pages % 2 == 0) {
  $shown_pages++;
}

  
Da sehe ich keine Schleife.  
  

> ternärer Operator  
> `$shown_pages = ($shown_pages < 3) ? 3 : ($shown_pages % 2 == 0) ? $shown_pages++ : $shown_pages;`{:.language-php}  
  

> Geht es hier nur um das Thema übersichtlich und logischer oder welchen Weg empfehlt ihr?  
  
Sagen wir's mal so: Der wesentliche Unterschied ist, dass der Fragezeichen-Operator im Sinne der Syntax ein "Ausdruck" ist und als solcher einen Wert, ein Ergebnis zurückliefert. Das if-Statement tut das nicht; es führt abhängig von einer Bedingung einen Code-Block aus oder eben nicht (bzw. entweder den einen oder den anderen Block, wenn ein else verwendet wird). Die Ausführung dieses Codes liefert aber kein Ergebnis.  
  
Genau davon sollte man meiner Ansicht nach die Entscheidung abhängig machen, ob man ein if-Statement oder den Fragezeichen-Operator nutzt.  
Es gibt Fälle, wo beides möglich ist:  
  
  if (bedingung)  
   { $variable = funktion1();  
   }  
  else  
   { $variable = funktion2();  
   }  
  
In solchen Fällen würde ich den ternären Operator vorziehen: Die Anweisung ist in beiden Entscheidungszweigen die gleiche, nur der berechnete Ausdruck ist unterschiedlich. Genau das drückt der ternäre Operator IMHO wesentlich klarer und übersichtlicher aus:  
  
  $variable = (bedingung ? funktion1() : funktion2());  
  
Der Code, der dabei intern ausgeführt wird, dürfte aber sehr, sehr ähnlich sein; so ähnlich, dass ich nicht glaube, dass man von einem Performance-Unterschied reden könnte.  
  
So long,  
 Martin  

-- 
Ist die Katze gesund,  
freut sich der Hund.