AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Break / Exit - Grundsatzfrage

Ein Thema von burn · begonnen am 19. Dez 2008 · letzter Beitrag vom 19. Dez 2008
Antwort Antwort
Seite 1 von 3  1 23      
burn

Registriert seit: 9. Apr 2003
80 Beiträge
 
Delphi 5 Professional
 
#1

Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:23
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:
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;
Setze ich ja hier das Exit nicht, rattert die Funktion ja durch die ganze Liste was
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...
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:26
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:27
Du kannst das aber auch mit einer while...do schleifen lösen - gänzlich ohne Break und Exit

Edit: Delphi-Referenz durchsuchenTStringList.IndexOf macht auch genau das was du willst, aber es ist wenn ich mich recht erinnere so ziemlich genauso umgesetzt wie du es jetzt hattest...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:28
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:
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;
@Ralph: darum geht es ja nicht
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#5

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:30
Sind for-Schleifen nicht schneller als while-Schleifen?
Ralph
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:30
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;
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#7

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:31
Delphi-Quellcode:
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;
Ganz ohne Exit

Oh...Roter Kasten ist wohl beim Weihnachtsmann aufm Schlitten.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:33
Sherlock, bei einer leeren Liste bekommst Du mit einer Fußschleife aber Kummer.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:33
Zitat von taaktaak:
Sind for-Schleifen nicht schneller als while-Schleifen?
Bei einer for-Schleife wird meines Wissens nach der Wert für den Zähler nur einmal abgerufen, bei "while" bei jedem Durchlauf - in wie fern die Compiler-Optimierung die while-Schleife rückwärts laufen lässt, wie sie es in bestimmten Fällen bei der for-Schleife tut, weiß ich aber nicht...

Im Zweifelsfall die beiden Methoden mal über GetTickCount() vergleichen =)
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
ATSV

Registriert seit: 8. Aug 2008
95 Beiträge
 
Delphi 7 Professional
 
#10

Re: Break / Exit - Grundsatzfrage

  Alt 19. Dez 2008, 11:33
wenn ihr so weitermacht haben wir wieder das selbe wie mit der negativen zahl
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 Uhr.
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