Announcement

Collapse
No announcement yet.

Alternative zum Goto-Befehl

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Alternative zum Goto-Befehl

    Liebes Forum,

    schon alleine beim Titel dieses Threads hat wahrscheinlich schon die Hälfte laut aufgestöhnt und weitergeklickt. Die Pros und Conts eines Goto-Befehls wurde wahrscheinlich schon 1000 mal diskutiert. Grundsätzlich gibt es leider sehr viele, die gegen diesen Befehl sind, ihn verteufeln und keinen Grund dafür sehen. Ich verstehe die Gründe dafür weitestgehend. Ich verfüge über eine mind. 20 jährige Programmiererfahrung und habe auf dem C64 mit Basic angefangen. Wer das noch kennt weiß, dass Goto dort inflationär genutzt wurde und dazu begetragen hat, dass größere Source-Codes nahezu unlesbar wurden.

    In späteren Zeiten habe ich allerdings beruflich an der Entwicklung eines umfangreichen ERP-Systems teilgenommen, wo auch Goto genutzt wurde. Per Richtlinie war es dort nur erlaubt, mit dem Goto-Befehl ans Ende einer Sektion zu springen. Dort habe ich den Befehl lieben gelernt!!! Dafür musste nur am Ende jeder Sektion ein Exit-Tag eingefügt werden. Dadurch wurde es an beliebigen Stellen möglich, die Section durch ein 'Goto Exit' zu verlassen.

    Genau sowas brauche ich für meine PHP-Includes! Momentan behelfe ich mir mit geschachtelten If-Schleifen, oder while(true) Schleifen, die es mir dann ermöglichen mit einem break; die Verarbeitung an beliebiger Stelle zu verlassen. Aber es kann mir doch keiner erzählen, dass das zu sauberem und besser lesbarem Code führt, als ein einzelner Goto Exit Befehl???

    Ich möchte nicht die 10.000ste Grundsatz-Diskussion lostreten. Ich möchte nur einmal von einem Hardcore-Goto-Gegner erklärt bekommen, was eine gute Alternative zu dem von mir gesuchten ist. Wie verlasse ich die Verarbeitung eines Includes (bzw. einer anderen logisch gekapselten Verarbeitungseinheit) ohne mir dabei die Finger zu brechen??? Oder gibt es wohlmöglich gar keine gute Alternative? Dann würde mich doch eine Grundsatz-Diskussion reizen, denn wie kann man einen Befehl, für den es sinnvolle Anwendungen gibt einfach streichen, nur weil es viele Leute gibt, die damit nicht richtig umgehen können?

  • #2
    Hallo,

    ein return tuts auch um ans Ende zum Springen (ganz ans Ende, also kurz vor die Rückkehr zum Aufrufer).

    Hardcore-Goto-Gegner
    Bin ich keiner. Man muss nur wissen wo man es einsetzt, aber das ist bei Allem so.
    Und einen wirklichen Goto-Gegner kannst nicht gegeben, denn jeder Code besitzt, wenn er mal im Maschinencodestadium angelangt ist, Jumps, die nix anderes als Gotos sind.

    Goto kann verwendet werden um (tief) geschachtelte Schleifen zu verlassen. Sonst gibts eigentlich kaum mehr Verwendung bzw. es wurde durch andere Möglichkeiten erstezt.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Auf dem 64er waren GOTOs vonnöten, da dort keine Schleifen wie while oder do/while vorhanden waren - jedenfalls ohne SimonsBasic nicht

      Jedes goto lässt sich durch richtige Strukturierte Programmierung vermeiden.
      Dies

      Per Richtlinie war es dort nur erlaubt, mit dem Goto-Befehl ans Ende einer Sektion zu springen.
      zeigt schon das entweder Befehle der strk. Programmierunf in diesem System fehlten oder falsch angewandt wurden

      Dadurch wurde es an beliebigen Stellen möglich, die Section durch ein 'Goto Exit' zu verlassen.
      Auch das soll vermieden werden!

      Genau sowas brauche ich für meine PHP-Includes! Momentan behelfe ich mir mit geschachtelten If-Schleifen, oder while(true) Schleifen, die es mir dann ermöglichen mit einem break; die Verarbeitung an beliebiger Stelle zu verlassen. Aber es kann mir doch keiner erzählen, dass das zu sauberem und besser lesbarem Code führt, als ein einzelner Goto Exit Befehl???
      Doch dem ist so. Das unkontrollierte hopsen im Code führt du schlechterem Code. Unkontrolliertes hin- und hergespringe.

      Es natürlch ziwischen Maschinensprache und Hochsprachen zu unterscheiden. Ersters haben - wie von gfoidl schon erwähnt - keine andere Möglichkeit: Java bsp hat überhaupt kein goto mehr (wenn man von Labels absicht.

      M.E. ist goto nur dann anzuwenden, wenn seine Vermeidung zu komplizierten Bedinungen führen würde - das ist mir allerdings auch noch nicht untergekommen....

      Insofern bedeutet die Nutzung von goto für mich -> schlechter Programmcode!

      Ich möchte nicht die 10.000ste Grundsatz-Diskussion lostreten.
      Offenbar doch, sonst hättest du nicht gepostest.

      Wie verlasse ich die Verarbeitung eines Includes (bzw. einer anderen logisch gekapselten Verarbeitungseinheit) ohne mir dabei die Finger zu brechen???
      wenn für dich ein paar whiles oder ifs Fingerbruch sind?

      Einen Grund für ein "Exit-Goto" gibt es wohl nicht. Wenn man eine Funktion vorzeitig verlassen möchte, benutzt man ein "return" und nicht einen Sprung ans Ende der Funktion
      Zuletzt editiert von Christian Marquardt; 21.09.2011, 12:04.
      Christian

      Comment


      • #4
        Hallo Gefoidl,
        hallo Christian,

        vielleicht muss ich noch etwas mehr Hintergrund liefern. Mein aktuelles PHP-Projekt besteht als einigen hundert Dateien, die jeweils den PHP-Code für eine bestimmte Funktion behinhalten. Eingebunden werden die Dateien überall mit Include, d.h. eine durchschnittliche Datei enthält ein bisschen individuellen Source-Code und diverse Includes. Am Anfang und am Ende jeder Datei wird ein Start-of-Include bzw. ein End-of-Include durchlaufen. Was darin gemacht wird ist unwichtig, es ist eben so. Das muss auch immer ohne jede Ausnahme durchlaufen werden.

        Dieses End-of-Include ist auch der Grund, warum ich kein Return-Befehl nutzen kann, denn dieser verlässt das Include augenblicklich, ohne dass die End-of-Include Logik noch durchgeführt wird. Vorstellen würde ich mir demnach, dass VOR der End-Of-Include Logik ein EXIT-Tag steht, welches nun von überall her direkt angesprungen werden kann. Was daran schlechter Programmierstil ist, verstehe ich nun eben nicht. Ich lasse mir das aber gerne erklären, alle meine Recherchen zu diesem Thema führten hier nicht zu einem besseren Verständnis der Position der Goto-Gegner.

        Auch die Position von Christian wird für mich nicht völlig deutlich. Was konkret ist an einem sauberen, unmissverständlichen 'Goto Exit' nicht in Ordnung? Jeder weiß, was da passiert, es gibt keinerlei Missverständnisse damit, es lässt sich genauso dokumentieren wie jeder andere Befehl, wo konkret (außer global-galaxtischer Aussagen wie "Sprunge sind schlecht") ist das was nicht ok?

        Hier noch ein paar individuelle Kommentare auf Christians Antwort:

        Zitat: Ich möchte nicht die 10.000ste Grundsatz-Diskussion lostreten.
        Offenbar doch, sonst hättest du nicht gepostest.
        Vielleicht hast Du den Grund meines Threads nicht ganz verstanden. Ich wollte primär keine Grundsatz-Diskussion um die Welt zu verbessern, sondern in erster Linie erklärt bekommen, welche echten Alternativen es zum Goto gibt (konkret zum Goto im oben beschriebenen Szenario). Deshalb noch mal meine konkrete Frage: Wenn ich den gesamten Rest eines Includes, z.B. einen 200 Zeilen langen Code, nicht mehr ausführen will, ist es dann für Dich eine echte Alternative, die gesamten 200 Zeilen in ein If-Statement reinzuhängen und den ganzen Murks entsprechend einzurücken? Bitte erklär mir den Vorteil zum direkten Sprung ans (logische) Ende, das ist es doch, was ich nicht verstehe.

        Das unkontrollierte hopsen im Code führt du schlechterem Code. Unkontrolliertes hin- und hergespringe.
        Das sind eben genau die Zitate, die mir bei allen meinen Recherchen immer wieder untergekommen sind. Aber das ist doch ein Totschlag-Argument, welches überhaupt gar nicht den Kern trifft. Wirklich niemand hat je behauptet, dass das wilde rumgehopse im Source-Code erstrebenswert ist. Ich habe nach einer Möglichkeit gefragt, geziehlt an Standard-Anker/Tags springen zu können, bei dem jeder, der den Code später mal liest sofort weiß, was passiert. Das ist doch wohl kein unkontrolliertes hopsen? Die alles-entscheidene Grund-Regel (man korrigiere mich hier gerne) ist doch, das Source-Code von einem selber und von jedem anderen später leicht verstanden und gewartet werden kann. Ist die Frage nicht legitim, ob ein ggf. fünffach-geschachteltes If-Statement zu mehr Verwirrung führt, als fünf Goto-Exit-Befehle?

        Viele Grüße,
        Duftox

        Comment


        • #5
          Hallo,

          Das sind eben genau die Zitate, die mir bei allen meinen Recherchen immer wieder untergekommen sind
          Gründlich recherchiert kannst du aber nicht haben. Siehe Donald E. Knuth: Structured Programming with Goto Statements und
          Edgsar Dijkstra: Go to statement considered harmful. Beide sind nicht gerade Niemand in der Szene, von daher sollte man ihnen schon glauben können.


          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Ein Problem oder schlecht sein heißt aber noch nicht das eine Programmiersprache auch eine sinnvolle Alternative liefert. Ich kenne PHP zu wenig um eine Alternative anzubieten (das angebotene Return hört sich aber sinnvoll an wenn es dem return in anderen Sprachen entspricht) aber bei der Aussage

            z.B. einen 200 Zeilen langen Code, nicht mehr ausführen will, ist es dann für Dich eine echte Alternative, die gesamten 200 Zeilen in ein If-Statement reinzuhängen und den ganzen Murks entsprechend einzurücken
            ist es egal ob if oder goto beides gehört dann in die Kategorie unleserlich wenn man den Codeblock nicht in handlichere Teile zerlegt (Unleserlich beginnt da wo Start und Ziel einen Codesprungs egal ob aufgrund einer Verzweigung, Schleife, Exception, goto, return etc. nicht mehr gemeinsam auf dem Bildschirm passen). Gefüllt stellen sich solche Fragen wie 'soll ich goto benutzen' eh erst wenn man andere strukturelle Probleme damit zu kaschieren versucht. Am geschicktesten wäre hier ein Beispiel.
            Zeig doch mal einen max. 10-Zeiler bei dem ein goto die Lesbarkeit erhöht.

            Comment


            • #7
              Hallo,

              schwer bei dem Thema NICHT in eine Grundsatzdiskussion zu verfallen

              Wie so viele Dinge mit durchaus positiven Seiten verdankt auch das GOTO seine Verteufelung dem extensiven und dem ursprünglichen Gedanken zuwiderlaufendem Einsatz. Allein der Gedanke an die Möglichkeit mit einem einzigen Befehl an beliebige Programmpunkte springen zu können, treibt dem strukturiert und objektorientiert vorgehenden Programmierer die Schweisperlen auf die Stirn.
              Gegen ein klar definiertes GOTO Exit ist nicht unbedingt etwas zu sagen, aber gib jemandem den kleinen Finger...
              In jedem Fall wäre ein GOTO Exit eine Ausnahme, der Sprung zu einem definierten Ende eines Programmteils, ggfs. über alle Grenzen (Schleifen, Verzweigungen, etc.) hinweg kann nur einer besonderen Situation, einer Ausnahme entstammen und sollte auch so behandelt werden. Und mit Exception-Handling würde ich es auch lösen.

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Das ist doch wohl kein unkontrolliertes hopsen? Die alles-entscheidene Grund-Regel (man korrigiere mich hier gerne) ist doch, das Source-Code von einem selber und von jedem anderen später leicht verstanden und gewartet werden kann. Ist die Frage nicht legitim, ob ein ggf. fünffach-geschachteltes If-Statement zu mehr Verwirrung führt, als fünf Goto-Exit-Befehle?
                Wie Ralf es schon sagt, wurde der Code offenbar wenig strukturiert angelegt. Das zeigt auch diese Antwort

                Dieses End-of-Include ist auch der Grund, warum ich kein Return-Befehl nutzen kann, denn dieser verlässt das Include augenblicklich, ohne dass die End-of-Include Logik noch durchgeführt wird.
                Du hast also schlecht struktrierten Code vor dir und dieses soll dann mit gotos behoben werden. Warum nicht den Ende-Code extrahieren und dann ausführen wenn er nötig ist?

                Vielleicht hast Du den Grund meines Threads nicht ganz verstanden.
                doch, denn du willst ja die Antwort zu

                welche echten Alternativen es zum Goto gibt (konkret zum Goto im oben beschriebenen Szenario).
                nicht zur Kenntnis nehmen, nämlich

                Strukturierte Programmierung mit allem was dazu gehört -> Codeaufteilung, While, If, negierte Bedigungen usw. Warum lautet deine Überschrift "ALTERNATIVE..." wenn du gar keine suchst oder willst?

                Wenn du das nicht nutzen willst, solltest du auch nicht um eine Absolution für in meinem Augen schlechte Programmierung bitten. Und schon gar nicht mit dem Hinweis auf eine 30 Jahre alte Programmiersprache wie CBM des 64er.

                ist es dann für Dich eine echte Alternative, die gesamten 200 Zeilen in ein If-Statement reinzuhängen und den ganzen Murks entsprechend einzurücken?
                Ja, ist es! Was ist daran so schlimm, das Einrücken wird automatisch vorgenommen, ein if und zwei Klammern

                Bitte erklär mir den Vorteil zum direkten Sprung ans (logische) Ende, das ist es doch, was ich nicht verstehe.
                Es widerspricht der str. Programmierung und auch letztlich dann einer OOP. ->Beitrag #5

                Du kannst auch mit dem Fahrrad quer über die Straße fahren. Das ist möglich. Die Regeln lauten jedoch anders. Auf deinem eigenen Grundstück können auch gerne deine Fahrradregel gelten.
                Zuletzt editiert von Christian Marquardt; 21.09.2011, 15:28.
                Christian

                Comment


                • #9
                  Erstmal allen, die mir geantwortet haben herzlichen Dank. Allerdings muss ich sagen, dass ich den Ton in diesem Forum, besonders von Dir Christian, ein bisschen angriffslustig empfinde. Ich habe lediglich eine Frage gestellt und mir erlaubt noch mal nachzuhaken, Kommentare wie

                  doch, denn du willst ja die Antwort zu ... nicht zur Kenntnis nehmen
                  Wenn du das nicht nutzen willst, solltest du auch nicht um eine Absolution für in meinem Augen schlechte Programmierung bitten.
                  wirken auf mich nicht gerade so, als wenn mir jemand sachlich etwas erklären will. Ich versuche hier nur etwas zu verstehen, sorry wenn ich dazu noch mal Nachfragen stellen muss. Ich kann mich an keine Passage in meiner Mail erinnern, wo ich irgendetwas von Deinen Vorschlägen abgelehnt habe.

                  Mir wurde nun zwar mehrfach gesagt, dass GoTo schlecht ist und dass ich gefälligst andere Befehle wie If, while, etc. nutzen soll, warum ein Goto-Exit so schlecht ist, wurde mir aber noch nicht erklärt, ich muss allerdings dazu sagen, dass ich mir die Links in gfoidls Post noch nicht durchgelesen habe, was ich nun erst mal tun werde.

                  Oben wurde ich um ein Beispiel gebeten, in dem ich konkret ein GoTo verwenden würde. Das folgende ist kein reales Beispiel, sondern ein Phantasie-Programm. Nennen wir es 'tagesprotokoll_analyse.php':

                  <?php

                  include('start_of_ínclude.php'); // Include existiert in jeder Datei //


                  // Einlesen des Tagesprotokolls, sofern schon Sätze existieren

                  $iv_datei_name = 'tagesprotokoll.txt';

                  include('lesen_datei.php');

                  $tagesprotokoll_tab = $ot_datei_tab;

                  unset($ot_datei_tab);


                  // Verlassen der Verarbeitung, sofern das Tagesprotokoll leer ist

                  if(!isset($tagesprotokoll_tab))
                  {
                  goto exit;
                  }

                  endlos lange Verarbeitung...

                  EXIT:

                  include('end_of_include.php'); // Include existiert in jeder Datei //
                  ?>


                  Bevor mir erneut unterstellt wird ich würde nur eine Absolution für mein GoTo suchen, erwähne ich es hier (zum wiederholten male) nochmal sehr deutlich: Ich will nur eine gute Alternative zum Beispiel oben!

                  Wenn ich Christian richtig verstanden habe, schlägt er vor, den Code-Bereich "endlos lange Verarbeitung" einfach in ein If-Statement zu setzen. Außerdem schreibt er hierzu:

                  Was ist daran so schlimm, das Einrücken wird automatisch vorgenommen, ein if und zwei Klammern
                  Das ist aber bei mir nicht so einfach, denn ich programmiere aus bestimmten Gründen im Notepad. Da ist nix mit automatisch einrücken. Da muss ich ggf. 1000 Zeilen selber korrekt einrücken, was ziemlich mühsehlig und auch fehleranfällig ist. Und wenn sich irgendwo was ändert, dann fange ich von neuem an, wieder die gesamte Einrückung anzupassen. Ist das etwa dann erstrebenswerte Programmierung?

                  Comment


                  • #10
                    Das ist aber bei mir nicht so einfach, denn ich programmiere aus bestimmten Gründen im Notepad. Da ist nix mit automatisch einrücken. Da muss ich ggf. 1000 Zeilen selber korrekt einrücken, was ziemlich mühsehlig und auch fehleranfällig ist. Und wenn sich irgendwo was ändert, dann fange ich von neuem an, wieder die gesamte Einrückung zu anzupassen. Ist das etwa dann erstrebenswerte Programmierung?
                    Was hat deine ungeeignete Programmierumgebung damit zu tun. Es gibt genügend IDEs für PHP Eclipse, Netbeans u.a. Die Nutzung von Notepad in wenig produktiv. Wir fügen als Begründung für ein goto also noch Notepad hinzu? Nutze wenigstens Textpad, was Syntaxhighlight und Tabs hat

                    Wenn du 20 Jahre Programmiererfahrung hast, fragt man sich doch, warum überhaupt so ein Problem entstehen kann....

                    In deinem Beispiel kann man den Code in eine extra PHP auslagern und dort verlassen ....Und wenn du das nicht willst ist ein if immer noch gut oder jedenfalls dann, wenn man eine IDE mit Codeformatierung hat

                    Des Weiteren zwingt mich bei der Codeanalyse das goto-exit erstmal zu der Stelle zu gehen und nachzuschauen was da ist. Ein return teilt mir mit, hier wird die Funktion verlassen und gut. Im ersteren Fall muss ich prüfen, was überhaupt noch für Code dahinter kommt -> nämlich dein sogenannter EXIT-Code. Der Code der "immer ausgeführt" wird.


                    Des Weiteren habe ich zum Ausdruck gebracht, dass das in MEINEN AUGEN eine schlechte Programmierung ist. Du musst dich da nicht anschließen
                    Zuletzt editiert von Christian Marquardt; 21.09.2011, 17:19.
                    Christian

                    Comment


                    • #11
                      Hallo Duftox,

                      zugegebenrmassen ist Christians Stil sehr "provokant" und "angiffslustig" aber so ist er nunmal und du musst dir keine Sorgen machen das es an dir oder deiner Frage liegen könnte.
                      In einem muss ich ihm jedoch zustimmen: Die Problematik ein goto verwenden zu wollen und es sogar als durchaus sinnvoll zu empfinden, entstammt der Tatsache, dass dein Codeablauf einfach - bitte verzeih mir, aber es ist die vorsichtigste Beschreibung die mir einfällt - völlig unstrukturiert ist.
                      Entschuldige wenn ich das so hart sage, aber bei einer vernünftigen prozeduralen oder sogar objektorientierten Lösung hättest du diese Probleme nicht. Ich kann mir beim besten Willen nicht vorstellen, dass man einen Codeblock aus mehreren tausend Zeilen nicht in kleinere logische Strukturen teilen kann, die sich in Funktionen und Prozeduren auslagern (und ggfs. sogar wiederverwenden) lassen. Eine Einzige! Funktion würde genügen, um dein Goto zu vermeiden!
                      PHP Code:
                      ...
                      function 
                      do_endlos_lange_Verarbeitung()
                      {
                        
                      endlos lange Verarbeitung...
                      }

                      if(isset(
                      $tagesprotokoll_tab)) {
                        
                      do_endlos_lange_Verarbeitung();
                      }

                      include(
                      'end_of_include.php'); // Include existiert in jeder Datei // 
                      Und selbst wenn du bei deinem Prinzip bleibst, includes als funktionen zu verwenden, dann könntest du "die endlos lange Verarbeitung" in eine separate Datei (per Copy & Paste und ohne Einrückung) auslagern.

                      PHP Code:
                      ...

                      if(isset(
                      $tagesprotokoll_tab)) {
                        include(
                      'endlos_lange_Verarbeitung');
                      }

                      include(
                      'end_of_include.php'); // Include existiert in jeder Datei // 
                      Zum Thema "warum ein Goto-Exit so schlecht ist":
                      Goto ist ein Befehl, der in der Lage ist, den Ablauf eines Programmes in einer Art und Weise zu ändern, die sich durch Strukturierung (z.B. in einem PAP) nicht darstellen lässt. Der Grundgedanke von Goto läuft einer prozeduralen und/oder objektorientierten Programmierung zuwider bzw. macht diese gänzlich unmöglich. Dabei ist es völlig egal ob Goto frei oder nur im Zshg. mit klar definierten "Sprungpunkten" eingesetzt wird. Wenn die Regeln moderner Programmierung beachtet werden so ist zudem ein Goto von sich aus obsolet! Goto ist also nicht um seiner selbst willen schlecht. Wenn jedoch die Verwendung eines Goto als sinnvoll, erstrebenswert und vereinfachend angesehen wird, dann ist das schlecht weil an der Stelle grundlegend und konzeptionell schon einiges schief gelaufen ist. Goto ist also schlecht, weil der Wunsch nach seiner Verwendung ein Indikator für schlechte, unstrukturierte und konzeptlose Programmierung ist!

                      Gruß Falk
                      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                      Comment


                      • #12
                        Hallo Falk,

                        dies ist in allen Aspekten die beste Antwort, die ich zu diesem Thema je gehört habe. Ich habe dadurch zwei Sachen gelernt:

                        1) Die Notwendigkeit von GoTos ist immer ein Indikator für Mängel in der Struktur.
                        2) Für meinen Fall konkret heißt dies: Größere Funktions-Einheiten sollten in kleinere aufgeteilt werden.

                        Hier noch ein bisschen Hintergrund: Ich betreibe schon jetzt ein außerordentlich strikte Modularisierung. Jede Funktion, die allgemeinen Charakter hat wird von mir schon ausgekoppelt um die Wiederverwendbarkeit zu gewährleisten. Wie oben schon erwähnt besteht mein aktuelles Projekt inzwischen aus mehreren hundert Einzel-Dateien, die alle eine klare Funktion haben. Was ich bisher allerdings nicht gemacht habe war, logisch-zusammengehörigen Code "auseinander zu reißen". In dem von mir gebrachten Beispiel handelt es sich meiner Meinung nach um solch logisch zusammengehörigen Code, denn der Bereich "endlos_lange_Verarbeitung" kann ja ohne das Einlesen der Datei "tagesprotokoll.txt' nie existieren.

                        Wenn mein Beispiel real gewesen wäre, hätten vor dem Bereich "endlos_lange_Verarbeitung" außerdem noch diverse Konsistenz-Prüfungen auf die eingelesene Datei existiert. Diese Prüfungen hätten dann ggf. wieder zum GoTo Exit geführt. In mir sträubt sich eigentlich alles, den Bereich "endlos_lange_Verarbeitung" als eigenständige Funktion auszukoppeln und diese somit von den Konsistenz-Prüfungen der Eingabe-Tabelle abzusplitten. Dann nämlich besteht wiederum das Risiko, dass die Auskoppelung auch ohne Konsistenz-Prüfungen aufgerufen wird, was natürlich nicht passieren sollte.

                        Ich möchte Dich daher noch mal um Deine Meinung/Einschätzung und Deine Erfahrung bitten: Hättest Du keine Probleme damit, eine solche, logisch-zusammengehörige Funktionseinheit zu splitten, oder würdest Du das ganze lieber doch in einen langes If-Statement hinein setzen. (Mein Beispiel mit den 1000-Zeilen war hier sicher etwas übertrieben - aber oben gab es ja auch einen Kommentar, in dem davon die Rede war, dass ein If-Statement nach Möglichkeit noch auf einer Seite dargestellt werden können sollte)

                        Viele Grüße,
                        Duftox

                        Comment


                        • #13
                          dies ist in allen Aspekten die beste Antwort, die ich zu diesem Thema je gehört habe. 1) Die Notwendigkeit von GoTos ist immer ein Indikator für Mängel in der Struktur.
                          Offenbar hast du die Beiträge hier nicht gelesen (und auch Beiträge, die man im Internet zu diesem Thema findet) - schon im 3.Beitrag

                          Jedes goto lässt sich durch richtige Strukturierte Programmierung vermeiden.
                          2) Für meinen Fall konkret heißt dies: Größere Funktions-Einheiten sollten in kleinere aufgeteilt werden.
                          Beitrag #6

                          ist es egal ob if oder goto beides gehört dann in die Kategorie unleserlich wenn man den Codeblock nicht in handlichere Teile zerlegt (Unleserlich beginnt da wo Start und Ziel einen Codesprungs egal ob aufgrund einer Verzweigung, Schleife, Exception, goto, return etc. nicht mehr gemeinsam auf dem Bildschirm passen).
                          Zuletzt editiert von Christian Marquardt; 22.09.2011, 13:49.
                          Christian

                          Comment


                          • #14
                            Originally posted by Duftox View Post
                            ...Hättest Du keine Probleme damit, eine solche, logisch-zusammengehörige Funktionseinheit zu splitten, oder würdest Du das ganze lieber doch in einen langes If-Statement hinein setzen.
                            Prinzipiell lässt sich jede logische Einheit wieder in kleinere logische Einheiten zerlegen - das ist einfach nur eine Frage der Definition.

                            Ich bin kein Freund von "zu langen" Blöcken, auch wenn ich die Definition von "zu lang" nicht unbedingt an der Größe des Bildschirms festmachen würde. (Wird Code schlechter wenn ich ihn auf dem Laptop bearbeite? )

                            Originally posted by Duftox View Post
                            ...In mir sträubt sich eigentlich alles, den Bereich "endlos_lange_Verarbeitung" als eigenständige Funktion auszukoppeln und diese somit von den Konsistenz-Prüfungen der Eingabe-Tabelle abzusplitten. Dann nämlich besteht wiederum das Risiko, dass die Auskoppelung auch ohne Konsistenz-Prüfungen aufgerufen wird, was natürlich nicht passieren sollte.
                            Bei deiner Form der Programmierung kann ich deine Sorge - das Funktionen oder Dateien ohne Zusammenhang aufgerufen werden - sehr gut verstehen. Aber wozu hat man Klassen und öffentliche und private Methoden erfunden?
                            Eine strukturierte Klasse mit sorgfältig gewählten privaten Methoden für die Eingabe, Prüfung, Aufbereitung, Ausgabe, etc. und den zugehörigen öffentlichen Methoden, die diese verwenden und zwar nur und ausschliesslich in der Art und Weise für die sie konzipiert wurden, verbunden mit einem durchdachten Exception-Handling und deine Ängste lösen sich in Wohlgefallen auf!

                            Gruß Falk
                            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                            Comment


                            • #15
                              . (Wird Code schlechter wenn ich ihn auf dem Laptop bearbeite? )
                              Also wenn du ihn bearbeitest dann j.. Scherz beiseite es hilft natürlich auch nicht die Schriftgröße im Editor zu verringern um besseren Code zu erzeugen. Es ist eine Faustformel. Wir können uns auch auf irgendeine Zeilenanzahl, Zentimeter, Quadratzoll oder Bogensekunden einigen.

                              Comment

                              Working...
                              X