![]() |
Re: for-Schleife gegen über while-Schleife
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. |
Re: for-Schleife gegen über while-Schleife
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 |
Re: for-Schleife gegen über while-Schleife
@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:
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. :mrgreen: Ich bevorzuge jedenfalls Häuser mit einem Ein/Ausgang und nicht welche mit 10 versteckten Ausgängen. :gruebel: |
Re: for-Schleife gegen über while-Schleife
Zitat:
Delphi-Quellcode:
while (i < length(SonnenStundenListe) - 1) and (not Result) do
begin
Delphi-Quellcode:
Hier ist while deutlich langsamer, weil bei for Length nur einmal aufgerufen wird, bei while jedoch mehrfach. Obwohl es fast gleich aussieht.
for I := 0 to length(SonnenStundenListe) - 1 do
begin 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:
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:
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... |
Re: for-Schleife gegen über while-Schleife
Zitat:
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:
|
Re: for-Schleife gegen über while-Schleife
Zitat:
|
Re: for-Schleife gegen über while-Schleife
Ein Beispiel ist dieser Code nach dem Prinzip eines endlichen Automaten:
![]() 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. |
Re: for-Schleife gegen über while-Schleife
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. :wink:
|
Re: for-Schleife gegen über while-Schleife
Knackpunkt ist allerdings tatsächlich die Ende-Bedingung :
Zitat:
Delphi-Quellcode:
Wem 20 Nanosek. wichtiger sind, als seine eigene Programmlogik, der soll meinetwegen sogar auf die eine Variable verzichten. :zwinker:
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; |
Re: for-Schleife gegen über while-Schleife
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 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