AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zuweisung für FOR-Schleifenvariablen wird nicht akzeptiert
Thema durchsuchen
Ansicht
Themen-Optionen

Zuweisung für FOR-Schleifenvariablen wird nicht akzeptiert

Ein Thema von Alexander Roth · begonnen am 7. Apr 2006 · letzter Beitrag vom 7. Apr 2006
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 10:53
Hi,

Die While-Schleifenlösung ist zwar vom Sprachkonzept her die sauberste, aber in der Realität grauenvoll.

Delphi-Quellcode:
i:=0;
While (i<m) and Not AbortedByInnerCode Do Begin
  j := 0;
  While (j<n) and Not AbortedByInnerCode Do Begin
    k := 0;
     While (k < r) and Not AbortedByInnerCode Do Begin
       l := 0;
       While (l < p) and Not AbortedByInnerCode Do Begin
         If DoSomeThing = DoesNotWork Then
           AbortedByInnerCode := True;
         l := l + 1;
       End;
       k := k + 1;
     End;
     j := j + 1;
  End;
  i := i + 1;
End;
Äh.. sauber?

Hier die Goto-Version: Ich finde das besser, weil es lesbarer und *kein* Spaghetticode ist. Denn nicht jedes Goto macht aus Code gleich eine Frickelschusterei. Goto ist ein legitimer Befehl, der -richtig (und damit sparsam!) dosiert- den Code übersichtlicher macht.
Delphi-Quellcode:
For i:=0 t o m-1 do
  For j:=0 to n-1 do
    For k:=0 to r-1 do
     For l:=0 to p-1 do
       If DoSomeThing = DoesnotWork Then
          Goto ExitLoop;

ExitLoop:
Mal ehrlich: Was ist übersichtlicher?
Ich würde allerdings eine lokale Prozedur verwenden:
Delphi-Quellcode:
Procedure OuterProc;
Var
  m,n,o,p : Integer;

  Procedure InnerLoop;
  Var
    i,j,k,l : Integer;
 
  Begin
    For i:=0 t o n-1 do
      For j:=0 to m-1 do
        For k:=0 to o-1 do
          For l:=0 to p-1 do
            If DoSomeThing = DoesnotWork Then
              Exit;
  End;

Begin
  ...
  InnerLoop;
  ...
End;
Damit sind die Goto-Ablehner zufriedengestellt. Ach so, die lokale Prozedur bekommt natürlich einen aussagekräftigen Namen. Denn eigentlich ist es ein 'ausführbarer Kommentar'.

Unabhängig davon, ob 4 verschachtelte Schleifen nicht vielleicht ein falsches Konzept/Algorithmus implizieren, ist die Beendigung aus dem inneren von Schleifen eine generelle Frage, die ich, einmal beantwortet, konsistent und konsequent durch den Code ziehen würde. Also
Entweder IMMER
- mit While-Schleifen arbeiten und einen Flag mitschleppen, ODER
- mit Goto arbeiten, ODER
- mit lokalen Prozeduren und Exit.

Ach, eins noch: Eine andere (sinnvolle) Verwendung für das GOTO fällt mir übrigens nicht ein, Euch etwa?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 16: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-2025 by Thomas Breitkreuz