Ankündigung

Einklappen
Keine Ankündigung bisher.

Goto in PHP6

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Goto in PHP6

    Moin,

    hab gefunden, dass goto anscheinend in PHP6 eingeführt werden soll.
    Zu sehen hier: PHP: Liste der reservierten Wörter - Manual
    Goto ist als reserviert in PHP6 eingetragen.

    Meine Frage ist jetzt: Wozu braucht man son Müll, der vor Jahrzenten mal üblich war?

    (mal nen Zitat dazu ausm Chat..)
    (21:56:2 (Ryuzaki) hm... das mit dem goto in php is schon seltsam...
    (21:56:47) (matze|) du bist seltsam
    (21:56:50) (Ryuzaki) was soll man mit dingen, die vor 30 jahren ueblich waren?...
    (21:57:00) (@Chrissi) jop
    (21:57:41) (@Chrissi) naja, hoffen wir mal, dass sie irgendwas innovatives dabeigebastelt haben, um nen grund für den einbau von goto zu haben...
    (21:57:42) (Ryuzaki) ich glaub, da ham die php-entwickler muell gebaut ^^
    Gruß
    Chrissi

    (hoffentlich im richtigen Forum gepostet...)


  • #2
    Ich weiß es nicht. Aber soweit ich weiß, wurde diese Überlegung wieder verworfen und stattdessen auf Labels bei break-Anweisungen gesetzt (hoffe, ich habe das richtig mitbekommen).
    Ich glaube, der Wunsch nach Goto kam aus der Community (wohl alles Oldschool-Programmierer), sollte allerdings nicht im konventionellen Sinne eingesetzt werden, sondern eher zu Fallunterscheidung. Wie die sich das vorgestellt haben, darfst du mich jetzt aber nicht fragen.
    Aber selbst wenn die es einführen würden, müsste man es ja nicht benutzen.
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      Habs gefunden... halleluja, wer brauchtn son Müll?
      PHP Bugs: #29287: Request: Line labels and goto

      Kommentar


      • #4
        Grummel...
        Ich gebe dem Typen ja recht: "Code ohne goto ist nicht automatisch gut". Stimmt, hat er recht. "Man kann Code auch ohne for-Schleifen und switch-Statements programmieren": stimmt auch, man kann ja stattdessen while und if/elseif/else benutzen (auch wenn es in vielen Fällen Dummsinn wäre).
        "Deshalb sollte man goto einführen, weil es manchmal der beste Weg ist": stimmt nicht, ebenso, wie man auf switch und while verzichten kann, kann man auf goto verzichten. goto hat dazu die blöde Eigenschaft, den Code unleserlich zu machen und das haben andere Sprachkonstrukte nicht oder nur bedingt (lange switches werden z.B. unleserlich, man sollte da eher if/elseif/else benutzen - goto macht den Code aber nicht nur unleserlich, sondern vor allem schwer verständlich und wartbar sowie fremdprogrammiererunfreundlich).

        Manman, die Welt läuft rückwärts. Demnächst arbeiten wir auch wieder alle mit Windows 3.1, wenn das so weiter geht.
        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

        Kommentar


        • #5
          Ich finde goto an manchen Stellen sehr praktisch. Richtig eingesetzt verringert es gerade unnötig komplizierten und verschachtelten Spaghetti-Code.
          Nach etwas Zeit zum Eingewöhnen finde ich zum Beispiel auch die Lösung in C# gut, dass case Blöcke keinen fall through mehr haben, sondern explizit mit goto angesprungen werden müssen. Und man kann auch nicht beliebig wild mit goto herumspringen, aber zum Beispiel aus (tief) verschachtelten Schleifen heraus. Und genau auf diese beide Fällen wird auch in #29287 hingewiesen.

          Kommentar


          • #6
            Um aus Schleifen herauszuspringen fände ich es sinnvoller, einen Parameter zu break hinzuzufügen, mit dem man regulieren kann, aus wie vielen übergeordneten Schleifen man herausspringen will. Also z.B. break 3 um diese und die beiden übergeordneten Schleifen abzubrechen.
            Eine goto wäre meiner Meinung nach ziemlich unnötig. Bisher habe ich es immer geschafft, meinen Code so umzuformen, dass ich immer schön links bleibe.
            Aus anderen Sprachen kenne ich noch ein Gosub, das nach der Ausführung wieder zurückkehrt. Also die entschärfte Version dessen. Aber auch nicht so das Wahre.
            Das ausbleiben des Fallthroughs sehe ich mit gemischten Gefühlen. Ganz abgesehen davon, dass es Entwickler anderer Sprachen vewirrt (was aber relativ egal ist) nutze ich switch-Konstrukte oft bewusst mit eben diesem Fallthrough. Aber ich kenne mich in C# jetzt nicht genug aus, dass ich das beurteilen könnte. Vielleicht gibt es ja auch ein continue oder ein fall oder was weiß ich, um weiterzugehen.
            Letztendlich ist das Springen in switches mit einem beliebigen Schlüsselwort aber etwas anderes als Goto (auch wenn es denselben Namen hat). Goto ist eine Anweisung, mit der man wild im Code hin- und herspringen kann. Wenn es sich aber wie in Java nur um Labels handelt, dann wäre es sogar ein akzeptables Konstrukt. Alles andere finde ich sinnlos und unnötig. Gefundenes Fressen für Anfänger und Schreiberlinge von Anfänger-Tutorials (eben die, die HTML-Tutorials schreiben, in denen Frames angepriesen werden).
            Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

            Kommentar


            • #7
              Hi,

              Das Durchfallen lassen bei Switches ist aber im Grunde auch so ein "unsauberes" Konstrukt wie ein goto.

              Gruß Thomas

              Kommentar


              • #8
                Aber das Ausführen mehrer Blöcke kann sehr praktisch sein und Redundanzen vermeiden. Deshalb ja eben das goto zum Anspringen anderer Labels im selben Switch.

                Kommentar


                • #9
                  Das Goto sollte auf jeden Fall auf einen Codeblock beschränkt sein. Das willkürliche Springen durch den gesamten Code wäre einfach...ähh...schlecht.
                  Außerdem würde ich nicht sagen, dass es so unsauber ist. Sauber ist es vielleicht nicht, aber nicht so unsauber wie ein Goto. Immerhin kann man mit Goto leicht Spaghetti-Code erzeugen.
                  Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                  Kommentar


                  • #10
                    Zitat von Manko10 Beitrag anzeigen
                    einen Parameter zu break hinzuzufügen, mit dem man regulieren kann, aus wie vielen übergeordneten Schleifen man herausspringen will. Also z.B. break 3
                    Das ist bereits so. Die Nachteile werden in der Anfrage beschrieben: Du änderst etwas am umliegenden Code und es hat Auswirkungen auf die (eigentlich) Blackbox "Innen", ohne dass Parameter der Blackbox geändert werden. Irgendeine Form von Beschränkung gerade im globalen Scope halte ich aber auch für notwendig.

                    Kommentar


                    • #11
                      Zitat von Manko10 Beitrag anzeigen
                      Um aus Schleifen herauszuspringen fände ich es sinnvoller, einen Parameter zu break hinzuzufügen, mit dem man regulieren kann, aus wie vielen übergeordneten Schleifen man herausspringen will. Also z.B. break 3 um diese und die beiden übergeordneten Schleifen abzubrechen.
                      Genau so funktioniert break doch schon. Dass "goto" nun ein reserviertes Wort ist heisst erstmal nur, dass die Entwickler die Diskussion abwarten wollen, vielleicht kommt ja noch das ultimative Argument fuer "goto". Aber eigentlich soll sich PHP ja in Richtung Objektorientierung entwickeln und fuer mich persoenlich steht da "goto" als eher prozedurales Konstrukt im Gegensatz dazu. Ich habe "goto" bisher noch nicht vermisst und ich hoffe es wird auch nicht eingefuehrt. Fuer primitivere Programmiersprachen wie Batch-Ausfuehrung oder Assembler (bitte das primitiv nicht falsch verstehen) mag das Sinn machen, aber in PHP habe ich es nicht ein einziges Mal vermisst. Wozu auch wenn es Schleifen und Funktionen gibt (grade die gibt es bei Batch und Assembler ja nur durch "goto" Konstrukte). Ich bin mir sicher dass auch hier wieder ein gut gemeintes Feature in PHP von vielen falsch interpretiert und fuer dreckige Konstrukte missbraucht wird, damit auch noch 5 Jahre spaeter Programmierer verzweifeln. Ich meine wie-viel Millionen Arbeitsstunden wurden in das Fixen von register_globals Anwendungen gesteckt und wieviel Zeit wurde durch den Schmarn urspruenglich gespart? Uebrigens funktionieren Exceptions ja schon aehnlich wie Sprungpunkte. Habt ihr schonmal versucht Exceptions zu debuggen? Da wird man verrueckt .. Also lassts bleiben mit dem "goto"
                      "Mein Name ist Lohse, ich kaufe hier ein."

                      Kommentar


                      • #12
                        Zitat von register_globals Beitrag anzeigen
                        Fuer primitivere Programmiersprachen wie Batch-Ausfuehrung oder Assembler (bitte das primitiv nicht falsch verstehen) mag das Sinn machen
                        Es gibt auch "weniger primitive" Sprachen, die guten Gebrauch von goto machen
                        Zitat von register_globals Beitrag anzeigen
                        Wozu auch wenn es Schleifen und Funktionen gibt (grade die gibt es bei Batch und Assembler ja nur durch "goto" Konstrukte).
                        Weil es Konstrukte gibt, bei denen goto zu mindestens weniger redundanten Code führt.

                        Donald Knuth Structured Programming with Goto Statements - Google-Suche

                        Kommentar


                        • #13
                          Welchen Overhead haben denn Schleifen oder Funktionen? (auf 41 Seiten hab ich jetzt echt keine Lust)
                          "Mein Name ist Lohse, ich kaufe hier ein."

                          Kommentar


                          • #14
                            (und ich fasse 41 Seiten jetzt nicht zusammen)

                            Kommentar


                            • #15
                              Du kannst nicht ein Argument nennen, dass fuer "goto" im direkten Vergleich zu Schleifen und Funktionen spricht?
                              "Mein Name ist Lohse, ich kaufe hier ein."

                              Kommentar

                              Lädt...
                              X