while-Schleife verbessern / verschönen
Ich habe folgende while-Schleife:
Delphi-Quellcode:
Kann man das noch irgendwie eleganter Lösen? Ich versuche gerade einen Programmablaufplan dazu zu machen, aber da bekomme ich etwas probleme, was mir anzeigt, dass es auch besser gehen müsste.
j := 0;
bCriteria := True; // durch Kriterien iterieren while (j < NodesCriteria.length) and (bCriteria) do begin bCriteria := IsHit(FormName, NodesCriteria.item[j]); DebugLog('Kriterium ' + IntToStr(j), BoolToStr(bCriteria, True)); Inc(j); end; if bCriteria then begin // letzten Knoten mit Treffer merken HitNode := Node; Inc(Counter); end; |
Re: while-Schleife verbessern / verschönen
Lerne mal die Tags der :dp: zu nutzen :mrgreen: :duck:
...:cat:... |
Re: while-Schleife verbessern / verschönen
Ich hatte Alt+S erwischt, anstatt Alt+D. :roll:
|
Re: while-Schleife verbessern / verschönen
Hm, so vielleicht?
Delphi-Quellcode:
procedure Foo(...);
var bCriteria: Boolean; begin for j := 0 to NodesCriteria.Count - 1 do begin bCriteria := IsHit(FormName, NodesCriteria.item[j]); DebugLog('Kriterium ' + IntToStr(j), BoolToStr(bCriteria, True)); if not bCriteria Exit; end; HitNode := Node; Inc(Counter); end; |
Re: while-Schleife verbessern / verschönen
Exit? Wenn dann ein break. Aber durch die while-Schleife wollte ich es verhindern so hart aus der for-Schleife aussteigen zu müssen.
|
Re: while-Schleife verbessern / verschönen
|
Re: while-Schleife verbessern / verschönen
Hallo Michael,
zur Eleganz kann ich nicht viel sagen, da der gezeigte Code nicht in sich abgeschlossen ist - HitNode, Node, Counter und IsHit() sind nicht eingeführt. Einen code walk through mache ich dir aber gerne. Zuerst fällt auf, dass eine kopfgesteuerte (while) Schleife mit zwei Abbruchbedingungen verwendet wird, obwohl die eine Bedingung (j < length) eine Zählschleife nahelegt und die andere (bCriteria) eine fußgesteuerte (repeat) Schleife. Wenn length 0 ist, dann wird die Schleife übersprungen und wegen des mit True initialisierten bCriteria so getan, als ob IsHit() mindestens einmal erfolgreich aufgerufen wurde. Ob das so korrekt ist, kann ich nicht beurteilen, da der Kontext fehlt. Deine Angst vor dem Einsatz von Break (oder Exit, Continue) solltest du versuchen zu überwinden. Es sind wohl definierte Sprachmittel, die eingeführt wurden um die Forderungen der strukturierten Programmierung mit prozeduralen Sprachen (Sprünge nur an den Schleifenrand) erfüllen zu können. Die unbedingte Vermeidung dieser Sprachmittel ist ähnlich gefährlich, wie der Einsatz von Goto. Ich gehe davon aus, dass der gezeigte Code getestet wurde und funktioniert und dass du ihn nur nachdokumentierst. Wenn du den DebugCode in die Funktion IsHit() verlagern kannst, dann könnte eventuell Spielraum für eine klarere Formulierung entstehen. Freundliche Grüße |
Re: while-Schleife verbessern / verschönen
Die angesprochenen Elemente sind nicht weiter aufgeführt, weil sie eigentlich zum Verständniss der Schleife unerheblich sind.
Zitat:
Zitat:
Zitat:
Besten Dank für eure Tipps und Meinungen. Ich noch mal. Folgender Auszug aus einer XML-Datei:
XML-Code:
Die Schleife iteriert jetzt durch die Knoten kriterium und nur, wenn alle Kriterien true liefern, darf der Zähler um eins erhöht werden.<doktyp FormularFilter="KOAU" SearchFieldName="Belegnummer"> <kriterium kennung="AB" MapField="Buchungsschluessel" fromChar="0" Length="2" /> <kriterium kennung="A16" MapField="Belegnummer" fromChar="2" Length="3" /> <ziel>(#BUNG05)\GUTSRIFT</ziel> </doktyp> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 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