Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Set-Type (also Menge) und for-in-Schleife (https://www.delphipraxis.net/151684-set-type-also-menge-und-schleife.html)

Uwe Raabe 28. Mai 2010 08:46

Re: Set-Type (also Menge) und for-in-Schleife
 
Zitat:

Zitat von himitsu
Hier wird die For-Schleife 10 Werte liefern und nicht nur 3.

Genau genommen wird die Schleife sogar nicht dreimal sondern achtmal durchlaufen, da das Set in ein Byte passt. Man kann das sehr schön im Debugger sehen. Das heißt auch, daß die Überprüfung Variable in Set achtmal durchgeführt wird, obwohl das Set nur drei Elemente hat. Erst beim Ordinalwert 8 bricht dir Schleife ab.

Unter Performanceaspekten ist dieses Konstrukt also eher schädlich.

himitsu 28. Mai 2010 09:03

Re: Set-Type (also Menge) und for-in-Schleife
 
Schon klar, daß der Datentyp angepaßt wird,
aber dennoch wird nur von Low( ) bis High( ) durchlaufen.


Delphi-Quellcode:
TMyEnum = (
  atMapping,    // Low(TMyEnum) = 0
  atVisible,
  atNotNull     // Low(TMyEnum) = 2
);

TMyEnum = (
  atMapping,    // Low(TMyEnum) = 0
  atVisible,
                 // hier wird die 2 bis 8 mitgezählt
  atNotNull = 9  // Low(TMyEnum) = 9
);

Uwe Raabe 28. Mai 2010 11:00

Re: Set-Type (also Menge) und for-in-Schleife
 
Zitat:

Zitat von himitsu
Schon klar, daß der Datentyp angepaßt wird,
aber dennoch wird nur von Low( ) bis High( ) durchlaufen.

Das gilt zwar für den inneren Teil der Schleife, aber nicht für die Schleife selbst.

Wenn du mal einen Breakpoint auf das Begin setzt, wirst du sehen, daß der Debugger insgesamt 9x anhält. Bei den ersten 3x wird der Schleifenbody durchlaufen, bei den internen Werten 3 bis 8 übersprungen. Erst der interne Wert 8 beendet dabei die for-Schleife.

Es passiert zwar immer noch das Richtige (wär ja auch noch schöner...), aber es werden überflüssige Befehle ausgeführt.

s.h.a.r.k 28. Mai 2010 13:20

Re: Set-Type (also Menge) und for-in-Schleife
 
Danke Jungs :mrgreen: Ist nun alles wesentlich klarer. Heute Nacht war auch einfach nicht mein "Tag".


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr.
Seite 2 von 2     12   

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