![]() |
AW: For-Schleife :Stilfrage
The answer is 42. What was the question? :lol:
|
AW: For-Schleife :Stilfrage
Wenn man die Interna von Delphi nicht kennt, dann würde man denken, dass diese Schleife nicht sauber ausgeführt werden kann, denn zaehler wird zwar auf 17 gesetzt, aber dann mit 0 überschrieben. Wenn ich das in einem Projekt gesehen hätte, dann hätte ich das gleich "rausgeschmissen" und den "to" Zweig mit einer Konstanten oder Variablen geschrieben.
Für mich ist das nicht sauber programmiert. Zitat:
|
AW: For-Schleife :Stilfrage
Zitat:
Wenn man der Ende-Variable einen "anderen" entsprechenden Namen gibt, dann mag das OK sein. Wofür man sowas nutzen, aber bei dann eher bei "größeren" Auswertungen, also wenn man da noch viel rechnet, dann dieses Zwischenspeichern und nur die kurze Variable in die Schleifenauswertung rein. Vorallem hat man da, beim Debuggen, ein Zwischenergebnis zum Prüfen. [edit] @zeras: Genau das ist das Problem mit dem Codeverständnis. Genauso sollte man besser keine Schleifenvariablen nach der Schleife auswerten, was dennoch Viele machen, da es oftmals grade noch so gut geht. |
AW: For-Schleife :Stilfrage
Zitat:
|
AW: For-Schleife :Stilfrage
Ich behaupte einfach, daß s früher (vor den letzen 20 Regeländerungen) mal richtig war. :stupid: (mir war schon so, daß da irgendwas nicht stimmen kann)
Was man auch noch beachten sollte, daß Delphi gerne mal die interne Behandlung der Schleifen anpaßt. - Zählbereich verschieben - und/oder sogar rückwärtszählen Wenn man in der Schleife das i eh nicht auswertet, dann kann für
Delphi-Quellcode:
locker mal
for i := 1 to 10 do
Delphi-Quellcode:
oder
for i := 0 to 10 do
Delphi-Quellcode:
gnommen werden.
for i := 9 downto 0 do
Bei Erstetem braucht nur noch +1 gerechnet werden, wenn der Wert doch verwendet wird. Vorallem wenn man einen String charweise durchläuft, wo überall sowieso -1 gerechnet würde, da der Stringindex bei 1 benginnt, wo sich dann -1 und +1 wieder aufheben. |
AW: For-Schleife :Stilfrage
Es gab eine Zeit da war ich stolz drauf alles in eine einzige Zeile und ohne Semikolon zu packen:
Delphi-Quellcode:
try while i <> 2 do begin if Random(100) = 50 then i := Random(50) else if Random(100) = 30 then i := Random(30) else i := i * 2 end except i := -1 end
|
AW: For-Schleife :Stilfrage
Hallo,
Um auf die Kernfrage zurückzukommen. Ja, es ist schlechter Stil, weil die Variable sowohl als Zählvariable als auch als Endbedingung verwendet wird. Eine Variable sollte nur für einem Zweck verwendet werden. Heiko |
AW: For-Schleife :Stilfrage
Bei der For-Schleife ist es wichtig zu wissen, dass der Von- und der Bis-Wert nur einmal ausgewertet werden.
Delphi-Quellcode:
In der Programmiersprache C/C++ ist das anderst aber wir sprechen hier von Pascal/Delphi.
// die Funktionen Von() und Bis() werden nur einmal aufgerufen
for i := Von() to Bis() do begin end; Deshalb ist es überflüssig für den Anfangswert und/oder den Endewert eine Zwischenvariable zu verwenden. Zu Debuggingzwecken oder zur besseren Lesbarkeit des Codes kann man natürlich eine Zwischenvariable verwenden. Was aber überhaupt nicht geht (und auch keinen Sinn macht) ist die Laufvariable der For-Schleife als Bis-Wert zu missbrauchen!!
Delphi-Quellcode:
// FALSCH!!!
zaehler := 17; for zaehler := 0 to zaehler do // RICHTIG! for zaehler := 0 to 17 do |
AW: For-Schleife :Stilfrage
@sx2008 geht insofern am Thema vorbei dass man bisweilen durchaus Schleifen mit
Delphi-Quellcode:
For i := 0 to yetCalculated do
|
AW: For-Schleife :Stilfrage
Zitat:
Der Grund den Schleifenzähler als Bis-Wert zu missbrauchen kann eigentlich nur so entstehen. 1.) Der Programmierer hat die Befürchtung, dass der Bis-Wert mehr als einmal berechnet wird. ==> er denkt er braucht eine Zwischenvariable 2.) Der Programmierer ist schreibfaul und verwendet einfach die Laufvariable der For-Schleife Dabei entsteht dieser Code
Delphi-Quellcode:
Da aber schon die Annahme bei 1.) falsch war, ist diese Vorgehensweise überflüssig.
// FALSCH!!!
zaehler := FunktionDieVielZeitBraucht(); for zaehler := 0 to zaehler do |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 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