Autor Beitrag
klezmor
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: Di 15.11.05 19:30 
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.

ausblenden 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.

ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus Sonstiges verschoben am Di 15.11.2005 um 18:35
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
klezmor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 15.11.05 20:08 
user profile iconklezmor hat folgendes geschrieben:
Was ist ein delphi-tag?

Sind diese netten Konstruktionen, die freundlicherweise durch die Moderatoren bereits nachgereicht wurden.
@CS: THX.
user profile iconklezmor 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 ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
klezmor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 and B=True
2. Abfrage C=True

UC?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.