Ist das GOTO in PHP böse?
Vor kurzem fand ich heraus, dass PHP 5.3 unterstützt die neuen sprachkonstrukt namens GOTO
. Jeder weiß, was es tut. Aber ist es nicht genau der traditionellen GOTO
es ist nur eine Sprungmarke. Ich bin interessant zu wissen, ob diese GOTO
ist böse und bedeutet, schlechter code?
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sei denn, Sie sind für die Programmierung in assembler, GOTO sollte immer in der gleichen Weise behandelt werden wie die Schwimmwesten aus den Flugzeugen: es ist gut, haben Sie zur Verfügung, aber wenn Sie benötigen, um Sie zu benutzen, es bedeutet, dass Sie sind in großen Schwierigkeiten.
InformationsquelleAutor der Antwort
Ich kann nicht glauben, dass niemand dieses geschrieben 🙂
Gewährt, PHP wird nicht kompiliert... Vielleicht die raptor jagen werden Sie bei jedem Besuch Ihrer website?
InformationsquelleAutor der Antwort
Schlechte Strukturierung der code ist böse, egal, die Struktur der Steuerung, die Sie verwenden.
Ich persönlich bevorzuge eine "goto", die deutlich macht, den Fluss des Programms zu "Steuern Variablen" und verschachtelten "wenn" , wird nur indirekt verursachen die gleichen Zweig der code.
So, nur schreiben die beiden Versionen (mit und ohne GOTO) und sehen, welche es ist einfacher zu verstehen. Dann ist die Entscheidung einfach.
InformationsquelleAutor der Antwort
Ich denke, dies ist der wichtigste Teil der PHP-Handbuch-Seite und hier noch fehlt:
IMHO das macht es sehr Verschieden von der ye olde BASIC-Stil gotos.
InformationsquelleAutor der Antwort
Ich bin in der Minderheit (derzeit), aber ich glaube, dass die Einschränkungen, die auf der PHP-goto-Konstrukt machen, ein sehr nützliches tool:
http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/
Ich tatsächlich zu Fuß durch ein Beispiel von der Pfeil-code (verschachtelte Bedingungen) und gestalten Sie es mit standard-Verfahren (guard-Klauseln gruppieren von Bedingungen, pulling out-Funktionen) in einer version und eine goto-basierte version in die andere version, und ich eigentlich lieber die goto-basierte refactoring.
InformationsquelleAutor der Antwort
Sind Waffen böse? Beide können verwendet werden, zum guten oder zum bösen. Ich würde sagen, es war einfacher, guten code zu schreiben, ohne zu springen, als mit.
InformationsquelleAutor der Antwort
Jeder Sprache-Funktion, machen den code besser lesbar in einer gegebenen situation ist Eine Gute Sache. GOTO ist eine solche Sprache verfügen, auch wenn diese Situationen sind wenige und weit zwischen. Wenn wir das Verbot der syntax, die es möglich gemacht, dass schlechte Programmierer schreiben schlechte, wartbaren code unsere Arbeit wäre sehr viel schwieriger.
InformationsquelleAutor der Antwort
Als software-Ingenieur, ich arbeite meistens auf "mainframes" und "big corporate Server"...
Und unsere tägliche Sprache (ich meine die in 95% unseres Basis-code) ist Cobol, die intensiv verwendet GOTOs.
Diese Verwendung bedeutet nicht, dass der code schlecht ist. Es bedeutet nur, dass dieses tool (SPRINGEN), war genau das richtige im moment Programme, die geschrieben wurden.
Beantworten Kaitsuli Frage, ich denke, es kann nützlich sein Werkzeug beim schreiben von PHP-Skripten.
Auf der anderen Seite, eine Menge von Skripten erreicht werden, ohne dass es für fast ein Jahrzehnt. Außerdem geht es gegen PHP-Entwicklung mit mehr Objekt-orientierte features.
IMHO, es ist noch eine gute noch eine schlechte Sache für die code erzeugt werden : gute Programme werden immer gut sein und "horror Programme" schlechter sein wird... Die Frage ist nur : "Warum das hinzufügen GOTOs 10 Jahre nach nachweisen, dass es nicht notwendig war ?".
InformationsquelleAutor der Antwort
SPRINGEN in der Regel ist böse, weil es Ihnen ermöglicht, zu bauen unstrukturierten code. Mit den üblichen loops, die Sie bauen können, gut strukturierten code, der leicht zu Folgen, weil es strukturiert ist.
Wenn Sie nicht von strukturierten code zu springen, von hier nach dort, Sie haben gerade festgestellt, das böse kommt aus der GOTO-Anweisung. Fast immer ist es besser, es zu vermeiden. Vielleicht einmal alle 100.000 Zeilen, es ist ein Ort, wo ein GOTO-Satz vereinfacht VIEL, der code ist somit nicht böse, aber wenn Sie sich nicht sicher sind, dann sollten Sie es vermeiden, das SPRINGEN.
Hoffe, das hilft.
EDIT: Naja, nur um meine eigene Meinung hier, es gibt andere Anweisungen ermöglichen das erstellen von unstrukturierten code und nicht als böse, wenn ich denke, dass Sie sein sollten.
Beispielsweise ein return in der Mitte einer Funktion ist ein GOTO zum Ende der es so ich Sie zu vermeiden und verwenden Sie nur eine Rückgabe in jeder Funktion einfach am Ende ist.
Anderen Sprachen, wie Vb.Net (vielleicht andere auch) ermöglichen, zu tun, Exit For, Exit, Während der Pausen und Dinge wie diese, die auch unstructure den code, und ich denke, dass sollte vermieden werden.
InformationsquelleAutor der Antwort
manchmal (ich meine in 0,01% der Fälle) ist es sinnvoll, wie wenn Sie haben ein langer Skript, und Sie möchten, um zu testen, einige Blöcke. aber nie halten Sie es in Ihre endgültige Skript
InformationsquelleAutor der Antwort
Verwendet, ich GEHE, wenn ich ein Skript schreiben, für arbeiten unter cli-Modus. Es, mein Leben zu retten.
InformationsquelleAutor der Antwort
SPRINGEN sollte entfernt werden aus der Sprache. Wenn jemand das Bedürfnis hat "bedingungslos transfer control", dann müssen Sie wieder zur Schule gehen, studieren, Strukturierte Programmierung 101
InformationsquelleAutor der Antwort