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 Schleifenvariable beschreiben, ... (https://www.delphipraxis.net/137349-schleifenvariable-beschreiben.html)

Medium 20. Jul 2009 06:27

Re: Schleifenvariable beschreiben, ...
 
Vorsicht ist hier dennoch geboten. Je nach Verwendung der Schleifenvariable macht der Compiler unterschiedliche Dinge bei der Optimierung. So wird auch gerne mal eine "for x=N to K" Schleife im Kompilat zu einer "for x=(K-N) downto 0" Schleife, da eine Prüfung auf 0 i.A. schneller ausfällt als eine auf beliebige Zahlen. Wenn man dann das Register von x auf solche Weise inkrementiert kann man sich vorstellen dass es ziemlich hässlich wird.

Wenn man sowas wie stepping in Delphi braucht, nimmt man sich am besten eine while- oder repeat-Schleife her. Die ist dann auch nicht viel langsamer, dafür aber gesichert richtig. Und die zwei Zeilen mehr im Code sind es denke ich nun wirklich nicht wert da seltsame Dinge zu tun um sie zu vermeiden.

Ich bin ja auch ein Freund von Dingen die man nicht tut, bzw. Fummelein die Möglichkeiten eröffnen. Aber in "ernsthaften" Projekten hat sowas 0,nix verloren. Das sind Dinge die schön zu wissen sind, anwenden: Besser nicht.

himitsu 20. Jul 2009 06:49

Re: Schleifenvariable beschreiben, ...
 
Da hier ein Pointer auf die Variable geholt wird, macht der Compiler eigentlich keine diesbezüglichen Optimierungen.

mkinzler 20. Jul 2009 07:01

Re: Schleifenvariable beschreiben, ...
 
Es ist nur die Frage was passiert, wenn der Compiler aus Performancegründen die Laufrichtung umdrehet und man manuelle den Zähler erhöht

himitsu 20. Jul 2009 07:11

Re: Schleifenvariable beschreiben, ...
 
Das macht er nur, wenn innerhalb der Schleife nicht direkt auf die Zählervariale zugegriffen, bzw. wenn sie garnicht verwendet wird.

Aphton 20. Jul 2009 10:26

Re: Schleifenvariable beschreiben, ...
 
Zitat:

Zitat von Medium
Wenn man sowas wie stepping in Delphi braucht, nimmt man sich am besten eine while- oder repeat-Schleife her.

Das muss nicht unbedingt sein.
Ein einfaches "continue" tuts auch :D

Delphi-Quellcode:
  for i := 0 to 10 do
  begin
    if not( i mod 2 = 0) then
      Continue;
    ShowMessage( 'Nur gerade Zahlen :D [' + inttostr(i) + ']' );
  end;
MfG

himitsu 20. Jul 2009 10:34

Re: Schleifenvariable beschreiben, ...
 
wenn dann eher so
Delphi-Quellcode:
for i := 0 to 5 do
begin
  i2 := i * 2
  ShowMessage( 'Nur gerade Zahlen :D [' + inttostr(i2) + ']' );
end;
geh mal mindestens in Tausendershritten ... da wäre das sehr unökonomisch die Schleife je 9999 mal anzufangen und nur je einmal abzuarbeiten :angel2:


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

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