AGB  ·  Datenschutz  ·  Impressum  







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

For in For dann Goto

Ein Thema von demic · begonnen am 15. Mär 2011 · letzter Beitrag vom 16. Mär 2011
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: For in For dann Goto

  Alt 15. Mär 2011, 21:55
Das Problem hier ist, dass die Schleife ggf. komplett durchlaufen kann, und dann ja trotzdem der Code unter deinem ForEnd Label ausgeführt wird. In diesem Falle wären dann a und b undefiniert. Lösung: Nutze ein weiteres Label, dass im unmittelbar nach der Schleife angesprungen wird, also wenn die "prüfungssachen mit a und b" nie zutreffen. Alternativ muss man natürlich empfehlen, das Konzept an der Stelle komplett zu überdenken, da Gotos allgemein zu miserablem Stil zählen

Edit: Mit den [ delphi] ... [ /delphi] Tags (ohne Leerzeichen) schaut der Code hier im Forum auch hübsch aus, Beispiel:
Delphi-Quellcode:
procedure...
label ForEnd, ForNothing;
begin
 for a := 0 to 10 do
 begin
  for b := 0 to 20 do
  begin
   if prüfungsachen u.a. mit 'a' und 'bthen Goto ForEnd;
  end;
 end;
 Goto ForNothing;
 ForEnd:
 ... variable a und b für die weitere Verarbeitung
 ForNothing:
end;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (15. Mär 2011 um 21:59 Uhr)
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: For in For dann Goto

  Alt 15. Mär 2011, 22:19
Holla, sehe ich da ein Goto?
LOL, gibts das in Delphi? Wo benutz man den dieses noch?
Ausser in diesem Beispiel.

alfold
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: For in For dann Goto

  Alt 15. Mär 2011, 22:22
Streng genommen halt garnicht
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: For in For dann Goto

  Alt 15. Mär 2011, 22:53
Wo benutz man den dieses noch?
Ausser in diesem Beispiel.
Sonst nicht
Der Ausbruch aus mehreren verschachtelten Schleifen ist eine der wenigen Gelegenheiten in denen man es eventuell akzeptieren kann.

Wurde schon oft diskutiert: Hier im Forum suchenGOTO



Im Prinzip ist die Zählervariable außerhalb der for-Schleife undefiniert, aber anscheinend wird der aktuelle Wert garantiert, wenn man mit exit oder goto aus der Schleife springt.

Eine andere Variante, die keine Warnungen bringen sollte:
Delphi-Quellcode:
procedure tuWas;
label ForEnd;
begin
  for a := 0 to 10 do
  begin
    for b := 0 to 20 do
    begin
      if prüfungsachen u.a. mit 'a' und 'bthen Goto ForEnd;
    end;
  end;
  // Wenn nicht herausgesprungen,
  // setze die Zählervariablen auf Endwerte.
  a := 10;
  b := 20;
  ForEnd:
  //... variable a und b für die weitere Verarbeitung
end;
Beide Varianten machen etwas anderes.

PS: Mediums Variante geht mit exit (dem kleinen Bruder von goto) allerdings auch:
Delphi-Quellcode:
procedure tuWas;
begin
  for a := 0 to 10 do
  begin
    for b := 0 to 20 do
    begin
      if prüfungsachen u.a. mit 'a' und 'bthen
      begin
        //... variable a und b für die weitere Verarbeitung
        exit; // Achtung: springe aus der ganzen Prozedur
      end;
    end;
  end;
end;
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: For in For dann Goto

  Alt 15. Mär 2011, 23:08
Daaaa haste völlig Recht, so wäre es noch netter. Exit sehe ich auch bei weitem als nicht ganz so fies an, nicht zuletzt, weil ich aus C-likes mit "return foo;" ein "result := foo; Exit;"-Konstrukt mittlerweile gewöhnt bin und zu schätzen gelernt habe. Das war auch grob, was ich mit "Konzept überdenken" gemeint hatte: Den Schleifenteil in eine Methode auslagern, die im frühen Erfolgsfall mit dem Ergebnis zurück kehrt. (Schaut mir nämlich arg nach einem (bi-)liniearen Suchvorgang aus, wo so was klassisch ist.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (15. Mär 2011 um 23:11 Uhr)
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: For in For dann Goto

  Alt 15. Mär 2011, 23:20
Währe in seinem Beispiel nicht Break besser als goto?
Exit bedeutet doch das ich die Procedure vorzeitig verlasse.
Break, ich unterbreche die Schleife.

Oder verwirrt mich jetzt das goto


€ alles zurück habs verstanden
musste es 2 mal lesen
alfold

Geändert von alfold (15. Mär 2011 um 23:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#7

AW: For in For dann Goto

  Alt 15. Mär 2011, 23:25
Steht doch im Kommentar, Exit verlässt die gesamt Prozedur.

Oder was meinst du?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: For in For dann Goto

  Alt 15. Mär 2011, 23:29
Nee alles ok
War noch mit den Gedanken bei der Diskusion über GOTO

alfold
  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 17:09 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