Autor Beitrag
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 02.10.10 18:42 
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Ok, danke für den Tipp, wusst ich nicht, werds gleich mal ausprobieren.
Habe jetzt mal alles mit GoTo bearbeitet.
Sind nur 2 Labels, weiß aber nicht ob das die beste Idee war.

2000 Zeilen und GOTO - dafür gehörst Du gesteinigt. :mrgreen:
Du wirst sicher merken, dass Du Dich nach einer Weile überhaupt nicht mehr in deinem Quellcode zurechtfinden wirst.

Wie schaut denn diese Routine in etwa aus? Ich bin mir sicher, da ist noch sehr viel Optimierungsbedarf. ;)
Ansonsten einfach user profile iconjaenickes Vorschlag folgen. Quelltext auslagern und gegebenfalls via Klasse zusammenfassen. ;)
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 02.10.10 18:46 
Ok, danke für die warnenden Hinweise.
Werde mich jetzt erstmal selbst geißeln und mir dann was anderes einfallen lassen :D
Mit dem Auslagern klappt soweit alles ganz gut, danke ist jetzt viel übersichtlicher geworden.

Lg

Henry

Für diesen Beitrag haben gedankt: elundril
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 02.10.10 19:03 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Das wäre ja der Super-GAU. Schlimm genug, dass es goto überhaupt gibt. Die Anwendungsfälle, in denen das wirklich sinnvoll ist kann man quasi an einer Hand abzählen. Dein Programm gehört zu 99,999% sicher nicht dazu...

Wohl wahr. Nur - sein Problem ist genau der einizige vernünftige Anwendungsfall für goto.
Nicht umsonst haben viele Sprachen break&continue mit Parametern, so dass folgendes ginge:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for i:= 0 to 100 do begin
  for j:= 0 to 100 do begin
    if foo then
      break(2);  //dieses break...
  end;
end;
//...landet hier

Ist aber in Delphi nicht, und damit bleibt lediglich Flag-gewurschtel übrig. Macht den Code nicht gerade lesbarer...

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 02.10.10 19:10 
Ehrlich gesagt ist durch Goto mein Code nicht unübersichtilcher geworden.
Normalerweise hatte ich auf die nächste Prozedur gezeigt mit zb read3.click.
Jetzt steht da halt goto r3.
Für mich eingeltich besser so und schneller vor allem.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 02.10.10 19:13 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Nicht umsonst haben viele Sprachen break&continue mit Parametern, so dass folgendes ginge:
Lesbarer ist es IMHO aber trotzdem nicht. :nixweiss:

Man selbst durchschaut es, aber wenn man sich sowas dann später anschaut, versteht man es auch kaum auf Anhieb und jemand anderes...

Wenn man sprechende Bezeichner wählt, sind Flags durchaus sinnvoll für diesen Zweck. Dann kann man direkt lesen wann die Schleife abgebrochen wird und muss eben nicht in der Prozedur suchen wo da rausgesprungen wird.

Klar, bei Mini-Prozeduren wo es z.B. eine einzelne Suchschleife ist oder so, da überblickt jeder auch ein break auf Anhieb, aber bei verschachtelten längeren Schleifen nicht.

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt steht da halt goto r3.
r3 wirst du aber später auch nicht mehr verstehen. ;-)
Sprechende Bezeichner wären schon sinnvoller.

Für diesen Beitrag haben gedankt: Marc.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 02.10.10 20:31 
Moin!

Statt goto kann man meißtens auch den Code in Prozeduren ausgliedern. Das hilft der Übersicht auf jeden Fall, selbst wenn goto ihr nicht schaden würde.

Die Ablehnung von gotos ist verbreitet, und wir wollen unseren Code ja alle noch mal anderen zeigen. Also lassen wir das Ganze^^

lg,

PS: Wenn du den Code veröffentlichen kannst, optimieren wir da gerne nochmal für dich rum(auf Länge/Stil/Benennung/Kommentare/Formatierung/was du willst) :)

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 02.10.10 22:12 
Danke für das Angebot!
Aber leider kann ich den Code noch nicht veröffentlichen. Top secret :D
Ich werde bestimmt noch ein paar Monate dadran sitzen, aber ich werde es wahrscheinlich OpenSource veröffentlichen.
Bis dahin werde ich garantiert noch einige Schwierigkeiten und Fragen damit haben :D
Und immoment bin ich ja nicht der einzige Coder dran, sind ja noch ein paar andere aus dem Forum, die tatkräftig helfen.
Aber wie gesagt, ich werde es dann iwann online stellen, so wie es immoment aussieht als Freeware.
Und btw, ich finde man brauch sich nicht für ein paar gotos schämen :P
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 03.10.10 17:30 
Ist doch ganz einfach:

Aus
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
For i:=1 to 100 do
  For j:=1 to 100 do
    for k:=1 to 100 do
  ....
       if Bedingung then
          break; // oder goto
...
// Hier gehts weiter

macht man über refactoring eine eigene Prozedur:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Procedure KomplexeSchleifen;
...
begin
  For i:=1 to 100 do
    For j:=1 to 100 do
      for k:=1 to 100 do
    ....
         if Bedingung then
            exit;
end;
...
...
begin
  KomplexeSchleifen();
  // Hier gehts weiter


Also auslagern. ist sowieso lesbarer.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Wenn man sprechende Bezeichner wählt, sind Flags durchaus sinnvoll für diesen Zweck. Dann kann man direkt lesen wann die Schleife abgebrochen wird und muss eben nicht in der Prozedur suchen wo da rausgesprungen wird.

Bringt nur etwas, wenn das Abbruchkriterium hinterher verwendet wird. Ansonsten ist das Flag eine überflüssige und unverständlicherweise verwendete Variable.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Klar, bei Mini-Prozeduren wo es z.B. eine einzelne Suchschleife ist oder so, da überblickt jeder auch ein break auf Anhieb, aber bei verschachtelten längeren Schleifen nicht.

Das Grundproblem ist doch, das man so viele verschachtelte Schleifen hat. Ich kenne eigentlich keinen Algorithmus, der mehr als drei verschachtelte Schleifen benötigt. Alles andere lässt sich durch Refactoring vereinfachen oder basiert auf einer falschen Datenstruktur.

_________________
Na denn, dann. Bis dann, denn.

Für diesen Beitrag haben gedankt: Hidden, Kha