AGB  ·  Datenschutz  ·  Impressum  







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

for-Schleife gegen über while-Schleife

Ein Thema von Luckie · begonnen am 21. Mär 2009 · letzter Beitrag vom 23. Mär 2009
Antwort Antwort
Seite 4 von 9   « Erste     234 56     Letzte »    
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#31

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 17:56
Das ist wirklich unwichtig, weil man niemals selber optimieren soll. Das ist das oberste Gebot im Compilerbau, optimiere niemals selbst. Dein Einwand ist doch nun wirklich super speziell. Ausnahmen bestätigen immer die Regel und die ist nunmal ganz einfach. Das ist genauso wie die Diskussion über die nicht zur strukturierten Programmierung gehörenden Befehle wie exit, break, continue, goto, label, ...
Die kann man bestimmt auch mal sinnvoll einsetzten, keine Frage, aber deshalb setzte ich sie nicht ständig ein. Sondern ich verwende sie vielleicht bei 1Mio. Programmzeilen 0,5mal. Ich habe sie noch nie in irgendeiner Anwendung benötigt, außer das exit, zu debug Zwecken.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#32

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 18:07
Hallo,

ich benutze die Schleife die das Problem am Schnellsten löst (für den Programmier). Sollte die Schleife zu einem schlechten Laufzeit verhalten führen, so muss an der Stelle eine Nachbesserung erfolgen. Vielleicht Denke ich da auch zu pragmatisch, weil die heutigen PCs doch recht schnell sind und die Millisekunden die ich einspare vom Betriebssystem wieder aufgefressen werden.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#33

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 18:24
@Luckie : höre besser auf deinen "Lehrer". Hier wird mehr auf break und sogar auf Exit gesetzt und das ist IMHO kein sauberer Stil. Man sehe sich mal diesen Source an :

Zitat von sx2008:
Delphi-Quellcode:
function IsPLZInArray(SonnenStundenListe: TSonnenStunden; PLZ: Integer): Boolean;
var
  i: Integer;
  CurrentPLZ: Integer;
begin
  for i := 0 to length(SonnenStundenListe) - 1 do
  begin
    CurrentPLZ := SonnenStundenListe[i, 0];
    if CurrentPLZ = PLZ then
    begin
      Result := True;
      Exit;
    end;
  end;
  Result := False; // nichts gefunden
end;
Beim ersten gucken hat der mich schon 5 Sek. aufs Glatteis geführt. Zuerst habe ich das kleine "Exit" nicht gesehen (auch nicht erwartet) und dachte, was soll denn das, result wird ja so oder so auf false gesetzt. Nun ja, das sorgt ja lediglich dafür, dass alles danach kommende einfach ignoriert wird. Genau wie auch Break ist so was für mich quasi ein GOTO ohne Zeilennummern. Warum ist das nun meiner Meinung nach schlechter Stil ?

Erstens aus eigener Erfahrung. Bei meinem ersten größeren Programm habe ich auch überall Exit benutzt. Ist ja schön einfach und "lesbarer". Irgendwann hagelte es aber Quereffekte, die äußerst schwer nachzuvollziehbar waren. Habe solcherlei Konstrukte dann konsequent eliminiert. Dann kam auch noch ein Prof. und hat die Überflüssigkeit solcher Dinge demonstriert. Prinzipiell braucht man die wirklich nicht.

Das ist aber kein Dogma. Es gibt wohl sinnvolle Ausnahmen, aber die Regel sind die nie und nimmer. Register hin oder her.

Ich bevorzuge jedenfalls Häuser mit einem Ein/Ausgang und nicht welche mit 10 versteckten Ausgängen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#34

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 18:35
Zitat von omata:
Das ist wirklich unwichtig, weil man niemals selber optimieren soll. Das ist das oberste Gebot im Compilerbau, optimiere niemals selbst.
Beispiel:
Delphi-Quellcode:
  while (i < length(SonnenStundenListe) - 1) and (not Result) do
  begin
Delphi-Quellcode:
  for I := 0 to length(SonnenStundenListe) - 1 do
  begin
Hier ist while deutlich langsamer, weil bei for Length nur einmal aufgerufen wird, bei while jedoch mehrfach. Obwohl es fast gleich aussieht.
Will man hier also while sinnvoll benutzen, dann muss man das Ergebnis von Length zwischenspeichern und damit selbst optimieren, was der Compiler bei for bereits automatisch tut.

Zitat von Hansa:
Ich bevorzuge jedenfalls Häuser mit einem Ein/Ausgang und nicht welche mit 10 versteckten Ausgängen.
Ich bevorzuge Häuser mit Notausgängen und Autobahnen mit Abzweigungen.

Nur weil die Autobahn von Berlin nach Hamburg geht, heißt das ja nicht, dass ich nicht zwischendurch abfahren darf. Trotzdem ist sie schneller als wenn ich solange (while ) über Bundesstraßen in die Richtung fahre bis ich da bin.

Zitat von quendolineDD:
In Zeiten der Mehrfachkernprozessoren macht es doch kaum noch Sinn, ob es nun 1 oder 8 Ticks sind, die solch eine banale Abfrage benötigt.
Sagten die Microsoft- und Firefox-Programmierer bei jedem "kleineren" Problem und wunderten sich, warum Chrome und Opera insbesondere beim Programmstart derart viel schneller sind.

Kleinvieh macht auch Mist. Wenn ich eine Abfrage habe, die 1 ms langsamer ist, weil man es nicht optimal geschrieben hat, dann ist das wenig. Habe ich dann davon 1000, dann ist das schon eine Sekunde...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#35

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 18:44
Zitat von Hansa:
Beim ersten gucken hat der mich schon 5 Sek. aufs Glatteis geführt.
fand das auch unübersichtlich geschrieben:
Delphi-Quellcode:
function IsPLZInArray(SonnenStundenListe: TSonnenStunden; PLZ: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;

  for i := 0 to length(SonnenStundenListe) - 1 do
  begin
    if SonnenStundenListe[i, 0] = PLZ then
    begin
      Result := True;
      Exit;
    end;
  end;

end;
Zitat von Hansa:
Ich bevorzuge jedenfalls Häuser mit einem Ein/Ausgang und nicht welche mit 10 versteckten Ausgängen.
Denke eine Funktion sollte sowieso nicht 10 Schleifen enthalten...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#36

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 18:49
Zitat von jaenicke:
Ich bevorzuge Häuser mit Notausgängen und Autobahnen mit Abzweigungen....
Nene, das gilt nicht ! Abzweigungen = Sphagetticode. Du fährst ja wohl kaum in Hamburg los und sagst einem, den du in Berlin treffen willst "wenn ich nicht da ankomme, dann hole mich bei irgendeiner Behelfsausfahrt ab, welche weiß ich aber noch nicht."
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#37

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 18:55
Ein Beispiel ist dieser Code nach dem Prinzip eines endlichen Automaten:
http://www.delphipraxis.net/internal....php?p=1011376
Da würde mir zumindest auf Anhieb keine besonders übersichtliche Variante einfallen, die komplett auf das Herausspringen verzichtet. Das hätte da zu deutlich mehr Abfragen geführt.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#38

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 19:04
Bei dem Aufbau der Funktionen innerhalb der Funktion und innerhalb der Funktion unterschiedlichen VAR Positionen hab' ich hier vor kurzem erst mit dem Rohrstock eines auf die Finger bekommen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#39

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 19:09
Knackpunkt ist allerdings tatsächlich die Ende-Bedingung :

Zitat von Luckie:
Delphi-Quellcode:
while (i < length(SonnenStundenListe) - 1) and (not Result) do
  begin
    CurrentPLZ := SonnenStundenListe[i, 0];
    Result := CurrentPLZ = PLZ;
    Inc(i);
  end;
end;
Ist zwar hier ziemlich einfach, aber ich entflechte das lieber trotzdem so ungefähr :

Delphi-Quellcode:
ende := result;
if not ende then
  ende := not (i < length(SonnenStundenListe) - 1);
while not ende do begin
  CurrentPLZ := SonnenStundenListe[i, 0];
  Result := CurrentPLZ = PLZ;
  Inc(i);
...
end;
Wem 20 Nanosek. wichtiger sind, als seine eigene Programmlogik, der soll meinetwegen sogar auf die eine Variable verzichten.
Gruß
Hansa
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#40

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 20:32
Hi Leute,

auch wenn die Frage jetzt blöd klingt, aber kann mir mal einer sagen warum Break oder Exit jetzt so schlimm in Schleifen sind? Ich geb ehrlich zu, dass ich Break recht häufig verwende. Ich mag while nicht so richtig. Bis jetzt wurde nur von gutem Stil und lesbarkeit gesprochen. Eine fachliche Begründung hab ich noch nicht gesehen (oder überlesen). Ich geb auch ehrlich zu, dass ich vorrangig aus alter Gewohnheit For-Schleifen mit Break anstatt while-Schleifen verwende. Die while-Schleifen fallen eigentlich auch nicht viel schwerer. Hab mir bis jetzt mit Break und Exit nichts gedacht.

Also, was passiert denn nun so schlimmes bei Break und Exit in Schleifen?

Gruß oki
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 9   « Erste     234 56     Letzte »    


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 03:54 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