Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi For oder While? (https://www.delphipraxis.net/34154-oder-while.html)

Pseudemys Nelsoni 18. Nov 2004 10:53


For oder While?
 
welche der beiden schleifen würdet ihr benutzen?

while schleife:

Delphi-Quellcode:
function TChans.ChannelExists(ChannelName: string): boolean;
var
  i: integer;
begin
  result := false;
  if ChannelName <> '' then
  begin
    i := Low(FChannels);
    while (not(result)) or (i <= High(FChannels)) do
    begin
      if CompareText(FChannels[i].Name, ChannelName) = 0 then
        result := true;
      inc(i);
    end;
  end;
end;
for schleife:

Delphi-Quellcode:
function TChans.ChannelExists(ChannelName: string): boolean;
var
  i: integer;
begin
  result := false;
  if ChannelName <> '' then
  begin
    for i := Low(FChannels) to High(FChannels)) do
      if CompareText(FChannels[i].Name, ChannelName) = 0 then
      begin
        result := true;
        break; // bzw exit;
      end;
  end;
end;
die while schleife prüft jedes mal aufs neue ihre Bedingung, die for schleife hingegen wird mit einem break/exit beendet... hab gehört das for schleifen perfformanter sind, break und exit aber wiederum ein schlechter stil sind.... also was sollte ich hier nehmen?

Jelly 18. Nov 2004 10:58

Re: For oder While?
 
Pinzipiell sind while rsp. repeat Schleifen flexibler in der Handhabung, da du hier zudem die Möglichkeit, deine Zählvariable selbst zu ändern. In einer For-Schleife wird diese immer automatisch um einen festen Wert erhöht oder erniedrigt..

Das Ändern der Zählvariable ist aber in seltenen Fällen nur notwendig, von daher ists egal ob For- oder While-Schleife.

Gruß

Pseudemys Nelsoni 18. Nov 2004 11:03

Re: For oder While?
 
hoi jelly,

es geht mir bei der for-schleife darum ob das break/exit nicht "schlecht" ist.

Würde es was bringen wenn ich bei der while schleife eine extra variable anlege die den wert für "High(FChannels)) " enthält, so das die funktion high() nicht jedesmal neu aufgerufen wird?

ibp 18. Nov 2004 11:19

Re: For oder While?
 
imho wird die nur einmal aufgerufen

Pseudemys Nelsoni 18. Nov 2004 11:25

Re: For oder While?
 
nein, wird jedes mal neu geprüft, sonst würde das ganze gar nicht funktionieren weil "i" dann ja immer den gleichen wert hätte

ibp 18. Nov 2004 11:32

Re: For oder While?
 
da müsste man mal den asm code prüfen ob das so ist...ich glaube nicht

Pseudemys Nelsoni 18. Nov 2004 12:13

Re: For oder While?
 
das ist in jeder while schleife so das ihre bedingung bei jedem durchlauf geprüft würd, anders würde die schleife keinen sinn machen ;)

bei der for schleife wird es (in delphi, nicht in C) dagegen nur 1mal geprüft.

ibp 18. Nov 2004 12:29

Re: For oder While?
 
oops :duck: habe die for-schleife gemeint, wer lesen kann ist klar im vorteil.

stimmt natürlich dass bei einer while oder repeat schliefe jedesmal geprüft wird und daher macht es sinn, die bedingungen durch eine variable festzulegen, damit sparst du dir natürlich einen etwaigen procedureaufruf

Pseudemys Nelsoni 18. Nov 2004 12:34

Re: For oder While?
 
:thumb: jo stimmt


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:42 Uhr.

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