Autor |
Beitrag |
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 02.10.10 18:42
HenryHux hat folgendes geschrieben : | 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.
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 jaenickes Vorschlag folgen. Quelltext auslagern und gegebenfalls via Klasse zusammenfassen. 
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: 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
Mit dem Auslagern klappt soweit alles ganz gut, danke ist jetzt viel übersichtlicher geworden.
Lg
Henry
Für diesen Beitrag haben gedankt: elundril
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Sa 02.10.10 19:03
jaenicke hat folgendes geschrieben : | 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:
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); end; end; |
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 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 02.10.10 19:13
Martok hat folgendes geschrieben : | Nicht umsonst haben viele Sprachen break&continue mit Parametern, so dass folgendes ginge: |
Lesbarer ist es IMHO aber trotzdem nicht.
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.
HenryHux hat folgendes geschrieben : | 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
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: 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 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Sa 02.10.10 22:12
Danke für das Angebot!
Aber leider kann ich den Code noch nicht veröffentlichen. Top secret
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
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 
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: So 03.10.10 17:30
Ist doch ganz einfach:
Aus
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; ... |
macht man über refactoring eine eigene Prozedur:
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(); |
Also auslagern. ist sowieso lesbarer.
jaenicke hat folgendes geschrieben : |
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.
jaenicke hat folgendes geschrieben : | 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
|
|
|