AGB  ·  Datenschutz  ·  Impressum  







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

while-Schleife verbessern / verschönen

Ein Thema von Luckie · begonnen am 23. Okt 2006 · letzter Beitrag vom 24. Okt 2006
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

while-Schleife verbessern / verschönen

  Alt 23. Okt 2006, 15:08
Ich habe folgende while-Schleife:
Delphi-Quellcode:
        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;
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: while-Schleife verbessern / verschönen

  Alt 23. Okt 2006, 15:09
Lerne mal die Tags der zu nutzen

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: while-Schleife verbessern / verschönen

  Alt 23. Okt 2006, 15:13
Ich hatte Alt+S erwischt, anstatt Alt+D.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: while-Schleife verbessern / verschönen

  Alt 23. Okt 2006, 15:22
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;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: while-Schleife verbessern / verschönen

  Alt 23. Okt 2006, 23:36
Exit? Wenn dann ein break. Aber durch die while-Schleife wollte ich es verhindern so hart aus der for-Schleife aussteigen zu müssen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#6

Re: while-Schleife verbessern / verschönen

  Alt 24. Okt 2006, 02:00
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: while-Schleife verbessern / verschönen

  Alt 24. Okt 2006, 06:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: while-Schleife verbessern / verschönen

  Alt 24. Okt 2006, 08:25
Die angesprochenen Elemente sind nicht weiter aufgeführt, weil sie eigentlich zum Verständniss der Schleife unerheblich sind.

Zitat:
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.
Genau das war mein Problem. Ich werde doch wohl wieder zu einer for-Schleife zurückwechseln.

Zitat:
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.
Autsch. Danke, das habe ich noch gar nicht gesehen. Das darf natürlich nicht sein.

Zitat:
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.
Er ist getestet und funktioniert. Es handlet sich um eine Änderung/Erweiterung, die ich jetzt noch dokumentieren muss.

Besten Dank für eure Tipps und Meinungen.

Ich noch mal.

Folgender Auszug aus einer XML-Datei:
XML-Code:
    
    <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>
Die Schleife iteriert jetzt durch die Knoten kriterium und nur, wenn alle Kriterien true liefern, darf der Zähler um eins erhöht werden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:04 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