![]() |
Break / Exit - Grundsatzfrage
Hallo,
habe mal eine eine grundsätzliche Frage. Oft genug habe ich jetzt schon in der DP gelesen, daß die Benutzung von Break und Exit schlechter Programmier-Stil ist. Aber wie löse ich dann z.B. folgendes Problem: Ich habe eine Liste bzw. Array mit Strings und möchte prüfen ob ein String schon in der Liste vorhanden ist. Ich mach das immer so:
Delphi-Quellcode:
Setze ich ja hier das Exit nicht, rattert die Funktion ja durch die ganze Liste was
function InListeVorhanden(SuchString: string): Boolean;
begin Result := False; for i := 0 to List.Count-1 do begin if SuchString = List[i] then begin Result := True; Exit; end; end; end; ja durchaus langsamer kein kann, wenn der Suchstring beim Index 5 gefunden wird und z.B. 10000 Einträge vorhanden sind. Wie sollte man es sonst machen, wenn man "guten" Programmier-Stil verwenden will. MfG Burn... |
Re: Break / Exit - Grundsatzfrage
Moin, Moin.
Nun, wenn die Liste unsortiert ist, mache ich es auch so - und habe kein schlechtes Gewissen! In einer sortierten Liste wäre das natürlich eine schlechte Lösung. Da kommt man ja durch binäre Suche viel eleganter zum Ziel. |
Re: Break / Exit - Grundsatzfrage
Du kannst das aber auch mit einer while...do schleifen lösen - gänzlich ohne Break und Exit :)
Edit: ![]() |
Re: Break / Exit - Grundsatzfrage
Erstmal: exit verlässt die komplette Methode, break nur die aktuelle Schleife. Und beide kann man durch eine zusätzliche Schleifenbedingung umgehen, wobei das bei einer for-Schleife nicht gehen kann, hier muss man dann auf while ausweichen.
Delphi-Quellcode:
@Ralph: darum geht es ja nicht ;)
function InListeVorhanden(SuchString: string): Boolean;
var i: integer; begin Result := False; for i := 0 to List.Count-1 do begin if SuchString = List[i] then begin Result := True; break; end; end; end; function InListeVorhanden(SuchString: string): Boolean; var i: integer; begin Result := False; i := 0; while (i < List.Count) and not Result do begin if SuchString = List[i] then Result := True; inc(i); end; end; |
Re: Break / Exit - Grundsatzfrage
Sind for-Schleifen nicht schneller als while-Schleifen?
|
Re: Break / Exit - Grundsatzfrage
Nehm eine while-Schleife und setz das, worauf du prüfst als Bedingung
Delphi-Quellcode:
begin
result := False; i := 0; while (not Result) and (i < (List.Count -1)) do begin inc(i); Result := (Suchstring = List [i]); end; end; |
Re: Break / Exit - Grundsatzfrage
Delphi-Quellcode:
Ganz ohne Exit ;)
function InListeVorhanden(SuchString: string): Boolean;
var i: integer; begin Result := False; i:= 0; repeat if SuchString = List[i] then Result := True; inc(i); until Result or (i = (List.Count-1)); end; Oh...Roter Kasten ist wohl beim Weihnachtsmann aufm Schlitten. Sherlock |
Re: Break / Exit - Grundsatzfrage
Sherlock, bei einer leeren Liste bekommst Du mit einer Fußschleife aber Kummer.
|
Re: Break / Exit - Grundsatzfrage
Zitat:
Im Zweifelsfall die beiden Methoden mal über GetTickCount() vergleichen =) |
Re: Break / Exit - Grundsatzfrage
wenn ihr so weitermacht haben wir wieder das selbe wie mit der negativen zahl :lol:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz