Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Simple If Then Else Frage (https://www.delphipraxis.net/124102-simple-if-then-else-frage.html)

Cyberstorm 14. Nov 2008 11:24


Simple If Then Else Frage
 
Hi.

Gibt es einen Unterschied zwischen:

Delphi-Quellcode:
if (StringList[i]='5') or (StringList[i]='-5') then Edit1.Visible:=True
 else Edit1.Visible:=False;
und

Delphi-Quellcode:
if ( (StringList[i]='5') or (StringList[i]='-5') ) then Edit1.Visible:=True
 else Edit1.Visible:=False;
also verändern die äußeren klammern irgendetwas oder kann ich mir die sparen?

vielen dank schonmal

DeddyH 14. Nov 2008 11:27

Re: Simple If Then Else Frage
 
In diesem Falle kannst Du sie Dir sparen. Notwendig werden sie z.B. dann, wenn Du and und or mischen musst, da and einen größeren Stellenwert hat als or.

Luckie 14. Nov 2008 11:29

Re: Simple If Then Else Frage
 
Viel einfachher:
Delphi-Quellcode:
Edit1.Visible := (StringList[i]='5') or (StringList[i]='-5')

DeddyH 14. Nov 2008 11:32

Re: Simple If Then Else Frage
 
Oder
Delphi-Quellcode:
Edit1.Visible := abs(StrToIntDef(StringList[i],0)) = 5;
Hat aber mit dem Kern der Frage nichts zu tun.

Sir Rufo 14. Nov 2008 12:35

Re: Simple If Then Else Frage
 
Ist wie in der Mathematik:
Punktrechnung geht vor Strichrechnung! Also multiplizieren bindet stärker als addieren.
Hier ist das so, dass ein and stärker binded als ein or.

Beispiel:
Code:
a*b + c = a*b + c
a*( b + c ) = a*b + a*c
Code:
a and b or c = a and b or c
a and ( b or c ) = a and b or a and c
cu

Oliver

alzaimar 14. Nov 2008 13:03

Re: Simple If Then Else Frage
 
Zitat:

Zitat von Luckie
Viel einfachher:
Delphi-Quellcode:
Edit1.Visible := (StringList[i]='5') or (StringList[i]='-5')

Eher: Viel häßlicher :zwinker:

Fridolin Walther 14. Nov 2008 13:20

Re: Simple If Then Else Frage
 
Dafür viel performanter. Eine "if" Abfrage erzeugt zwangsläufig einen bedingten Sprung. Sowas kostet Performance, weil der Prozessor im Endeffekt nicht weiß was er cachen soll: Den Code bei "then" oder bei "else". Modernere CPUs haben zwar heuristische Verfahren um zu sehen welcher Sprung "wahrscheinlicher" ist, aber wenn mans vermeiden kann ohne die Codelesbarkeit merkbar zu verschlechtern, sollte man die von Luckie gezeigte Schreibweise wählen.

alzaimar 14. Nov 2008 13:23

Re: Simple If Then Else Frage
 
Zitat:

Zitat von 0xF30FC7
Dafür viel performanter.

Das ist bei der Frage nach Ästhetik und Übersichtlichkeit irrelevant, und unabhängig davon bei einer Zuweisung an eine Eigenschaft eines VCL-Controls einfach unwichtig.

Und nach einem kurzen Test ist das noch unwichtiger, weil es keinen Unterschied macht.

Fridolin Walther 14. Nov 2008 13:30

Re: Simple If Then Else Frage
 
Zitat:

Zitat von alzaimar
Das ist bei der Frage nach Ästhetik und Übersichtlichkeit irrelevant

Daher auch meine Einschränkung: Falls es die Lesbarkeit des Codes nicht merkbar verschlechtert. Lesbarkeit ist natürlich das Wichtigste überhaupt. Wobei ich persönlich ein if-then-else-Konstrukt deutlich unübersichtlicher finde als so eine einfache Zuweisung. Aber das ist wahrscheinlich sehr subjektiv. Ich wollte letztlich nur auf den negativen "performance impact" aufmerksam machen, der bei solchen Abfragen entstehen kann.

DeddyH 14. Nov 2008 13:33

Re: Simple If Then Else Frage
 
Leute, Ihr schweift vom Thema ab :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz