Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - if anweisungs problem


hibbert - Sa 11.01.03 01:22
Titel: if anweisungs problem
hallo,
eigendlich ist es kein richtiges problem, ich möchte nur wissen, ob ich das auch kürzer fassen kann.

Quelltext
1:
2:
3:
if(auto.Left=83) or (auto.Left=84) or(auto.Left=85)then
begin
end;


gibt es da nicht etwas mit

Quelltext
1:
2:
3:
if auto.left=83..85 then
begin
end;

:?: :?: :?:
ich hoffe, dass es da soetwas gibt.

mfg hibbert


Brueggendiek - Sa 11.01.03 01:34

Hallo Hibbert!

Im Prinzip geht das - mit SETs.


Quelltext
1:
2:
3:
if auto.left in [ 83..85 ] then
begin
end;


Es ist übrigens auch möglich, unzusammenhängende Werte zu schreiben, z.B.:

Quelltext
1:
2:
3:
if auto.left in [1, 10..15, 99] then
begin
end;


Die Bedingung ist erfüllt, wenn der Wert 1, 99 oder im Bereich 10 bis 15 ist.

Die Angaben in der eckigen Klammer bilden eine Mengen-Konstante.

Gruß

Dietmar Brüggendiek


hibbert - Sa 11.01.03 12:34

Hey, vielen dank Brueggendiek, damit kann man echt zeit sparen ! :wink:

mfg hibbert


Klabautermann - Sa 11.01.03 14:27

Hallo,
hibbert hat folgendes geschrieben:
vielen dank Brueggendiek, damit kann man echt zeit sparen ! :wink:

wie man es sieht. Dein Programm ist mit der OR Variante schneller als mit der IN Variante.
Die frage ist, ob dich die paar Taktzyklen bei heutigen Rechnern stören.

Gruß
Klabautermann


hibbert - Sa 11.01.03 15:22

hallo,
Klabautermann, da musst du mich falsch verstanden haben. das mit
Zitat:
vielen dank Brueggendiek, damit kann man echt zeit sparen ! :wink:

war anders gemaint, und zwar beim eintippen.
es ist ja wohl ein unterschied wenn ich eintippe

Quelltext
1:
2:
3:
if (auto.left=20)or(auto.left=21)or (auto.left=22)or (auto.left=23)or (auto.left=24)or (auto.left=25)or (auto.left=26)or (auto.left=27)...or (auto.left=50) then
begin
end;

oder wenn ich das eintippe:

Quelltext
1:
2:
3:
if auto.left in [20..50] then
begin
end;

da hab ich doch dann zeit gespart oder ? :wink:
mfg hibbert


smiegel - Sa 11.01.03 16:12

Hallo,

folgendes geht auch:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
case auto.left of
  20..50:
    begin
      ...
      TuIrgendwas;
      ...
    end;
end; // case

Dieser Code ist, wenn ich mich nicht täusche, performanter als der Mengenvergleich.


Klabautermann - Sa 11.01.03 16:30

Hallo,
hibbert hat folgendes geschrieben:
Klabautermann, da musst du mich falsch verstanden haben. das mit

nein ich habe dich schon richtig verstanden. Ich wollte dich nur auf die negativen Seiten der Mengenoperationen hinweisen. Nur um das klar zu stellen: Ich verwende in solchen Fällen auch Mengenoberationen.

smiegel hat folgendes geschrieben:
Dieser Code ist, wenn ich mich nicht täusche, performanter als der Mengenvergleich.

Ich weiß nicht wie Delphi hier Optimiert, aber für mich ist auch das ein Mengenvergleich.

Gruß
Klabautermann