Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Verschachtelte if strukturen
klezmor - Di 15.11.05 19:30
Titel: Verschachtelte if strukturen
Hallo,
Wenn ich einen boolschenausdruck habe, der zu überprüfen ist und dieser wiederum aus mehreren boolschenausdrücken zusammengesetzt ist mit and oder or gibt es ja mehrere möglichkeiten dies vorzunehmen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if (z.B.a=true) then begin if (b=true) then begin if (c=true) then begin test; end; end; end; |
oder.
Delphi-Quelltext
1: 2: 3: 4:
| if ((a=true)and(b=true)and(c=true)) then begin test; end; |
was ist der interene unterschied der 2 versionen, gibt es eine schnellere methode oder sind beide intern gleich schnell. Oder gibt es sonstige unterschiede?
Moderiert von
Christian S.: Delphi-Tags hinzugefügtModeriert von
Christian S.: Topic aus Sonstiges verschoben am Di 15.11.2005 um 18:35
BenBE - Di 15.11.05 19:43
Gemeinsam ist beiden Versionen, dass sie ohne Delphi-Tag grausam aussehen.
Der Unterschied liegt daran, dass das erste Statement vom Compiler schwerer optimiert wird (wenn überhaupt). Bei der zweiten Anweisung bricht nämlich die Auswertung ab, wenn feststeht, dass nicht mehr True rauskommen kann.
klezmor - Di 15.11.05 19:59
Was ist ein delphi-tag?
habe deine aussage nicht ganz verstanden, wenn bricht die auswertung ab und wieso ist das eine nicht so optimiert?
BenBE - Di 15.11.05 20:08
klezmor hat folgendes geschrieben: |
Was ist ein delphi-tag? |
Sind diese netten Konstruktionen, die freundlicherweise durch die Moderatoren bereits nachgereicht wurden.
@CS: THX.
klezmor hat folgendes geschrieben: |
habe deine aussage nicht ganz verstanden, wenn bricht die auswertung ab und wieso ist das eine nicht so optimiert? |
Angenommen, du hast
A:=True,
B:=False und
C:=True;
Im ersten Beispiel wäre die Ausführung
If A=true Then,
If B = True Then --> Abbruch, da zweite Bedingung nicht erfüllt. Der Compiler macht in diesen Fällen keine Sprungoptimierungen, d.h. das u.U. dein Source etwas größer wird.
Beim zwiten Source macht der Compiler ein
If A and B and C Then draus, wobei er
and C nur ausführt, wenn er sieht, dass der erste Ausdruck überhaupt gilt. Daher hast Du bei der zweiten Version einen Vergleich weniger drin, was eben (etwas) Zeit spart ...
klezmor - Di 15.11.05 20:37
Ich hätte das jetzt gerade andersherum gedacht, wenn z.B. a=false ist dann kümmert er sich bei der ersten variante gar nicht mehr um b und c, also müsste doch die erste variante schneller sein, ich verstehe die logik dahinter nicht ganz.
BenBE - Di 15.11.05 21:15
Nicht ganz:
Siehe:
1. Variante:
1. Abfrage A=True
2. Abfrage B=True
3. Abfrage C=True
2. Variante:
1. Abfrage A and B=True
2. Abfrage C=True
UC?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!