Was ist spaghetti-code?
Kannst du ein kurzes Beispiel von real, übertrieben spaghetti-code, vielleicht sagen, was es tut? Können Sie mir zeigen, ein wenig debugger Alptraum?
Ich meine nicht IOCCC code, das ist science-fiction. Ich meine, Beispiele aus dem wirklichen Leben, die geschehen, um Sie...
Update
Der Fokus hat sich von "post einige spaghetti-code" zu "was ist genau spaghetti-code?". Aus einer historischen Perspektive, die aktuellen Entscheidungen zu sein scheinen:
- alten Fortran code mittels computed gotos Massiv
- alten Cobol-code mit Hilfe der ALTER-Anweisung
InformationsquelleAutor der Frage Federico A. Ramponi | 2008-10-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mir mehr moderne Beispiel der spaghetti-code ist, wenn man 20-dlls und alle DLL-Verweise gegenseitig in die eine oder andere Weise. Ihre dependency graph sieht aus wie eine große blob, und Ihrer code-Hopfen-alle über dem Platz, ohne wirkliche Ordnung. Alles ist voneinander abhängig.
InformationsquelleAutor der Antwort Brian Genisio
Gibt es auch Ravioli-Codedas ist das Gegenteil. Schöne kleine Stücke von Funktionalität, eine saubere Schnittstelle ordentlich gewickelt fleischigen Güte, saßen alle in einer schönen sauce Rahmen.
InformationsquelleAutor der Antwort Joris Timmermans
Ich bin nicht ziehen diese aus meinem Kopf. Dies ist, was ich hatte, mit zu arbeiten, wenn auch vereinfacht. Sagen wir mal so, im Grunde haben Sie ein Programm, das die Bedürfnisse einer enum:
Sondern das, was wir haben, ist
Aber natürlich keine Implementierung einer hash-Tabelle ist gut genug, so gibt es eine lokale Implementierung von hash-Tabellen, die enthält etwa 10 mal mehr code als eine Durchschnittliche open-source-Implementierung mit der Hälfte der features und die doppelte Anzahl an bugs. Die HashTable ist eigentlich definierten virtuellen, und es gibt eine Fabrik HashTableFactory zum erstellen von Instanzen des HashTables, aber wahr, um das Muster HashTableFactory ist auch virtuell. Um zu verhindern, dass ein infite Kaskade von virtuellen Klassen gibt es eine Funktion
Damit überall, wo der code muss myenum's er trägt einen Verweis auf die Instanz der HashTable-und HashTableFactory, in Fall, dass Sie möchten, um mehr HashTable ist. Aber warten Sie, das ist noch nicht alles! Dies ist nicht, wie die hash-Tabelle wird initialisiert, aber es ist getan, indem Sie schreiben einen code, der liest XML:
und das einfügen in eine hash-Tabelle. Aber der code ist "optimiert", damit es nicht Lesen einer ascii-Datei myenum.xml, sondern es gibt eine compile-Zeit-Skript, das generiert:
aus myenum.xml und die hash-Tabelle initialisiert, die durch eine Funktion:
genannt:
Ok, wir haben also eine Menge code, um eine enum-Struktur. Es ist im Grunde in einer Funktion verwendet:
- und das heißt in einem Kontext, wo:
Also, was wir tatsächlich haben, ist statt
haben wir manged zu erzeugen Tausende von code-Zeilen (private neue, buggy, Komplex, Implementierung von Hashtabellen, und xml-Leser und-Schreiber) an die Stelle der oben genannten 3.
InformationsquelleAutor der Antwort Joe Smith
Einer Linux-SCSI-Treiber (die namenlos bleiben soll die Schuldigen zu schützen):
Wie habe ich Sie das gem?
Die Ausgabe ist eine Folge von Zeilen-listing-Dateien geordnet nach der Anzahl der gotos um verschiedene Etiketten, wie folgt:
InformationsquelleAutor der Antwort Diomidis Spinellis
Echte spaghetti-code wurde in COBOL und verwendet die ALTER-Anweisung.
Hier ist ein Beispielwährend eine "humor", ich habe gesehen, diese Art der Sache. Fast gefeuert, einmal für erwähnenswert, dass jedes Programm mit einer Alter-Anweisung war offensichtlich in einem Zustand der Sünde. Ich weigerte mich zu "pflegen", das Programm, es ging schneller, um es zu ersetzen, als es zu verstehen.
InformationsquelleAutor der Antwort S.Lott
Vergessen Sie nicht zu erwähnen Objekt-orientierte spaghetti.
Dies ist, wenn Sie versuchen, verwenden alle die design patterns im Buch, auch wenn Sie nicht sinnvoll. Dies führt zu spaghetti-code auf der konzeptionellen Ebene, die weit mehr nachteilig auf die Qualität als klassische springen-basierte spaghetti-code.
InformationsquelleAutor der Antwort
Du hast danach gefragt, du wirst es bekommen:
Dies ist die Quelle eines DOS .com-Datei, spielt der Blue Danube waltz. Die ausführbare Datei ist nur 176 bytes in der Größe. Code wird wieder verwendet, da die Daten und Umgekehrt.
InformationsquelleAutor der Antwort Nils Pipenbrinck
Real spaghetti-code erfordert eine Vielzahl von non-local gotos. Leider ist dies nicht möglich, verwenden die meisten modernen Sprachen.
Edit: Einige schlagen vor, Ausnahmen und longjmp als Ersatz für GOTO. Diese sind aber weit zu begrenzt und strukturiert, da Sie nur erlauben, Sie zurückzugeben, bis der Aufrufliste. Real GOTO ermöglicht es Ihnen, zu springen, um alle Linie überall in das Programm, das nötig ist, um echte spaghetti.
InformationsquelleAutor der Antwort JacquesB
In einfachen Worten spaghetti-code ist jeder code in einer beliebigen Programmiersprache, in der es nicht möglich ist, auf die Spur, die nächste post von der Ausführung, oder zumindest schwierig zu bestimmen, wo der nächste Punkt geht in der Antwort eine Aktion.
InformationsquelleAutor der Antwort Ziaullah
Dies ist eine MIDI-parser, die ich schrieb vor einiger Zeit. Es war eine quick-and-dirty proof-of-concept, aber trotzdem, ich werde die Schuld für seine Hässlichkeit: 4 Ebenen von verschachtelten Bedingungen plus die gefürchtete mehrere gibt. Dieser code gemeint war, zu vergleichen, 2 MIDI-Ereignisse in der Reihenfolge, Sortieren Sie Sie durch Priorität beim schreiben auf eine Datei. Hässlich wie es war, es hat den job anständig, aber.
InformationsquelleAutor der Antwort Juan Pablo Califano
Hier ist die Duff ' s Devicevon Matt ' s Antwort auf diese Frage:
InformationsquelleAutor der Antwort Federico A. Ramponi
Spaghetti-code: Ursprung in den frühen 60er Jahren in Italien als ein Alternatives Rezept für eine bestimmte pasta-Gerichte, spaghetti-code war, gekocht von einem restaurant-Unternehmer, die versuchten, automatisieren die Erstellung von einem fool-proof-entree. Gedrückt durch den Mangel an Zeit, um die design-Ingenieur/Koch schneiden Ecken, das führte zu Problemen in der Rezeptur zu früh. In einem verzweifelten Versuch, Abhilfe zu schaffen eine gute Idee schlecht gegangen, verschiedenen Gewürzen waren schnell Hinzugefügt, um das Gebräu als das Rezept entstand aus der Kontrolle. Das Ergebnis war eine zähe, kurvig, aber dennoch potenziell schmackhafte Haufen text, die später wachsen, um eine Praxis gepflegt, die von Entwicklern weltweit.
InformationsquelleAutor der Antwort Cliff
Haben Sie jemals sah generierten code von Flex/Bison-scanner und-generator? Eine Vielzahl von labels und Präprozessor-Direktiven.
Ist es absolut unmöglich zu verstehen, was drin ist.. und absolut unmöglich, zu Folgen Strömung des Programms.
Das ist definitiv spaghetti-code.
InformationsquelleAutor der Antwort Jack