Ternärer Operator oder Schleifen
Matt
- php
1 MudGuard
1 Google-Leitbediener2 dedlfix
0 Tom
0 Der Martin
0 steckl
Hallo,
meine Frage ist recht simpel.
Ist die Performance (u.A. Schnelligkeit) bei Ternären Operatoren gleich schnell oder gar schneller als bei "einfachen" Schleifen?
z.B.
einfache Schreibweise
if ($shown_pages < 3) {
$shown_pages = 3;
} elseif ($shown_pages % 2 == 0) {
$shown_pages++;
}
oder
ternärer Operator
$shown_pages = ($shown_pages < 3) ? 3 : ($shown_pages % 2 == 0) ? $shown_pages++ : $shown_pages;
Geht es hier nur um das Thema übersichtlich und logischer oder welchen Weg empfehlt ihr?
Danke
Hi,
$shown_pages = (bedingung) ? $shown_pages++ : $shown_pages;
Sowas ist gar nicht zu empfehlen.
Niemals eine Variable, auf die ein post-/pre-in-/de-crement angewendet wird, im selben Ausdruck nochmal verwenden.
Du sagst hier, für den Fall, daß die Bedingung wahr ist:
$shown_pages = $shown_pages++;
In Worten:
Gib mir den Wert von shown_pages, erhöhe ihn zu irgendeinem späteren Zeitpunkt, und weise den gegebenen Wert shown_pages zu.
Kannst Du garantieren, daß zuerst die Zuweisung gemacht wird und erst dann hochgezählt wird?
Oder wird erst hochgezählt, und dann der vorher geholte Wert zugewiesen?
cu,
Andreas
Ist die Performance (u.A. Schnelligkeit) bei Ternären Operatoren gleich schnell oder gar schneller als bei "einfachen" Schleifen?
http://www.google.de/search?q=Performance+ternäre+Operator ->
http://www.php-performance.de/kontrollstrukturen-bedingungen-if-switch-ternaer.php
echo $begrüßung;
Ist die Performance (u.A. Schnelligkeit) bei Ternären Operatoren gleich schnell oder gar schneller als bei "einfachen" Schleifen?
if ist keine Schleife. Abgesehen davon ist der Unterschied in der Ausführungszeit sicher messbar, aber praktisch vernachlässigbar, da er im Grundrauschen untergeht.
if ($shown_pages < 3) {
$shown_pages = 3;
} elseif ($shown_pages % 2 == 0) {
$shown_pages++;
}
>
> oder
>
> `$shown_pages = ($shown_pages < 3) ? 3 : ($shown_pages % 2 == 0) ? $shown_pages++ : $shown_pages;`{:.language-php}
Wichtiger als die Millisekunden Rechenzeit sind die Minuten Denkzeit, um das verschachtelte zweite Beispiel fehlerfrei zu entwirren.
echo "$verabschiedung $name";
Hello,
Wichtiger als die Millisekunden Rechenzeit sind die Minuten Denkzeit, um das verschachtelte zweite Beispiel fehlerfrei zu entwirren.
Da habe ich noch so ein Ding, über dessen Sinn bzw abwicklung ich seit Tagen grübele:
$indicator = pack('c', @eval('return '.$indicator.';'));
Ein harzliches Glückauf
Tom vom Berg
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.
Hi,
Ist die Performance (u.A. Schnelligkeit) bei Ternären Operatoren gleich schnell oder gar schneller als bei "einfachen" Schleifen?
Das weiß ich nicht, aber was hindert dich daran es auszuprobieren?
Ausserdem gibt es keine if-Schleifen, sondern if-Abfragen.
> } elseif ($shown_pages % 2 == 0) {
Wenns dir um die Performance geht könntest du hier auch anders vorgehen um abzufragen, ob die Zahl gerade ist: Performance von Abfragen gerade/ungerade
Ich denke mal, dass sich da von Javascript auf PHP nicht viel ändern wird.
Geht es hier nur um das Thema übersichtlich und logischer oder welchen Weg empfehlt ihr?
Ich persönlich finde es bei mehr als einem Fragezeichen ziemlich unübersichtlich, besonders wenn alles in einer Zeile steht.
mfG,
steckl
Moin.
Ausserdem gibt es keine if-Schleifen, sondern if-Abfragen.
Siehe auch if-schleife.de ;)
Wobei ich als dt. Übersetzung von 'if statement' if-Anweisung bevorzugen würde...
Christoph
@@steckl:
Ausserdem gibt es keine if-Schleifen
Live long and prosper,
Gunnar