if-Schleifen
Paul
- javascript
Moin,
was ist schneller:
10 verschachtelte if-Schleifen (die zu ca. 90% immer alle durchlaufen werden)
oder eine if-Schleife mit 10 Parametern?
Danke,
Paul
hi,
10 verschachtelte if-Schleifen (die zu ca. 90% immer alle durchlaufen werden)
oder eine if-Schleife mit 10 Parametern?
Wenn 90% aller "ankommenden" Daten in jede der Bedingungen passt frag doch einfach die 10% ab, die nicht verarbeitet werden...
Ansonsten denke ich kannst du auch 10 Bedingungen abfragen, er muss intern sowieso jede der einzelnen Kriterien verifizieren.
Gruss,
Seppel
Gruss,
Seppel
Danke.
Hi,
10 verschachtelte if-Schleifen (die zu ca. 90% immer alle durchlaufen werden)
oder eine if-Schleife mit 10 Parametern?
Da if keine Schleife ist und if keine Parameter hat, werden 10 if-Schleifen wegen ihrer Nichtexistenz in Null-Zeit durchlaufen, eine nichtexistente parametrierte if-Schleife ebenso.
Was also willst Du wirklich wissen?
cu,
Andreas
Hello out there!
Da if keine Schleife ist […]
„Da soll nochmal jemand sagen, es gäbe keine if-Schleife …“ [[http://forum.de.selfhtml.org/archiv/2005/3/t104287/#m642940@title=Wer hat’s gesagt?]]
See ya up the road,
Gunnar
PS: SELFHTML Suche nach 'if-Schleife'
4 Suchergebnisse in 'Forums-Archiv 2007'
59 Suchergebnisse in 'Forums-Archiv 2006'
60 Suchergebnisse in 'Forums-Archiv 2005'
67 Suchergebnisse in 'Forums-Archiv 2004'
72 Suchergebnisse in 'Forums-Archiv 2003'
88 Suchergebnisse in 'Forums-Archiv 2002'
12 Suchergebnisse in 'Forums-Archiv 2001'
12 Suchergebnisse in 'Forums-Archiv 2000'
4 Suchergebnisse in 'Forums-Archiv 1999'
gudn tach!
PS: SELFHTML Suche nach 'if-Schleife' [...]
naja, da waren aber auch so manche meta-diskussionen dabei, z.b. sowas:
</archiv/2004/9/t90684/#m544188>
prost
seth
Hallo Paul,
if-Schleifen ...
Du meinst Bedingungen. Aber zu deiner Frage:
Programmiertechnisch ist weder eine Bedingung mit 10 Abfragen
if (a && b && c)
noch eine Verschachtelung derselben
~~~javascript
if (a)
if (b)
if (c)
sinnvoll. Beide Varinaten sind äußert fehleranfällig, schwer zu lesen und wartungsunfreundlich. Die Schreibweise:
~~~javascript
if (!a)
return false;
if (!b)
return false;
if (!c)
return false;
entspricht zwar nicht der reinen Lehre (ein Ausstiegspunkt je Funktion) ist aber wesentlich leichter zu lesen und problemlos zu erweitern falls mal eine elfte Bedingung hinzukommt.
Die Geschwindigkeitsunterschiede dürften bei heutigen Prozessoren nicht messbar sein.
HTH
Jochen
Du meinst Bedingungen. Aber zu deiner Frage:
Programmiertechnisch ist weder eine Bedingung mit 10 Abfragen
if (a && b && c)
noch eine Verschachtelung derselben
~~~javascript
if (a)
if (b)
if (c)
>
> sinnvoll.
Das hängt sehr davon ab, was der Sinn der Bedingungen ist.
> Beide Varinaten sind äußert fehleranfällig, schwer zu lesen und wartungsunfreundlich. Die Schreibweise:
>
> ~~~javascript
if (!a)
> return false;
> if (!b)
> return false;
> if (!c)
> return false;
entspricht zwar nicht der reinen Lehre (ein Ausstiegspunkt je Funktion) ist aber wesentlich leichter zu lesen und problemlos zu erweitern falls mal eine elfte Bedingung hinzukommt.
Aber sie ist nicht identisch zum vorherigen Code.
if (Bedingung) { do_something }
ist nicht das gleiche wie
if (!Bedingung) { do_not_something }
Die Geschwindigkeitsunterschiede dürften bei heutigen Prozessoren nicht messbar sein.
Die Geschwindigkeit wird auch bei dem Bedingungsreihenkonstrukt maximal sein, sobald der Wahrheitswert der Bedingung feststeht. Und das ist bei UND-Verknüpfung der Fall, wenn der erste Wert zu FALSE evaluiert wird.
Hallo,
Aber sie ist nicht identisch zum vorherigen Code.
if (Bedingung) { do_something }
ist nicht das gleiche wie
if (!Bedingung) { do_not_something }
Sinn meines Postings war es einen dritten Weg aufzuzeigen. Mit durchschnittlichem Abstraktionsvermögen sollte man erkennen, dass dieser nicht 1:1 in vorhandenen Programmcode eingesetzt werden kann.
Die Geschwindigkeit wird auch bei dem Bedingungsreihenkonstrukt maximal sein, sobald der Wahrheitswert der Bedingung feststeht. Und das ist bei UND-Verknüpfung der Fall, wenn der erste Wert zu FALSE evaluiert wird.
unbestritten. Unter dem Aspekt der reinen Prozessortakte hast du recht. Aber wie groß ist die Differenz zwischen der ersten Bedingung die zu false evaluiert und der zehnten?
Aber das war auch nicht meine Intention. Was nützen mir ein paar Takte weniger wenn ich dadurch unwartbaren Spaghetticode habe?
Grüße,
Jochen
gudn tach!
Programmiertechnisch ist weder eine Bedingung mit 10 Abfragen
if (a && b && c)
noch eine Verschachtelung derselben
~~~javascript
if (a)
if (b)
if (c)
>
> sinnvoll. Beide Varinaten sind äußert fehleranfällig, schwer zu lesen und wartungsunfreundlich.
so pauschal ("aeusserst ...") stimme ich da nicht zu.
ausserdem kann man einiges davon ganz einfach verbessern durch andere code-formatierung, z.b.
~~~javascript
if( a
&& b
&& c)
oder von mir aus
if( a
&& b
&& c
)
~~~.
ob etwas "schwer zu lesen" ist, ist gerade in der programmierung sehr oft geschmackssache.
> Die Schreibweise:
>
> ~~~javascript
if (!a)
> return false;
> if (!b)
> return false;
> if (!c)
> return false;
entspricht zwar nicht der reinen Lehre (ein Ausstiegspunkt je Funktion) ist aber wesentlich leichter zu lesen und problemlos zu erweitern falls mal eine elfte Bedingung hinzukommt.
genauso problemlos erweiterbar sind auch die anderen varianten.
aber ansonsten bin ich ebenfalls der meinung, dass man i.a.r. um 10-fach verschachtelte bedingungen herumkommt, z.b. indem man verschiedene eigenschaften/bedingungen semantisch gruppiert, was im endeffekt vielleicht etwas mehr code bedeutet, aber u.u. mehr uebersicht bringt. das kommt jedoch alles immer _sehr_ auf die anwendung an.
prost
seth
aber ansonsten bin ich ebenfalls der meinung, dass man i.a.r. um 10-fach verschachtelte bedingungen herumkommt, z.b. indem man verschiedene eigenschaften/bedingungen semantisch gruppiert, ...
.. oder eine entsprechend benannte Funktion schreibt, bei heutigen Prozessorleistungen (in der Annahme das der OP nicht auf irgendwelchen exotischen Kleinrechnern arbeitet) sollte der Umweg keine Rolle mehr spielen.
Struppi.