Spaghetti sind köstlich, wenn sie mit Marinara, Pesto oder cremiger Nudelsoße übergossen sind - schrecklich, wenn sie mit meinen Codezeilen zu tun haben. Dieser Artikel ist meiner (Liebes-?) Hassbeziehung zu Spaghetti-Code gewidmet.
Ich hoffe, dass Sie am Ende des Artikels Spaghetti-Code genauso hassen wie ich, und wir uns gegenseitig mit unserer gemeinsamen Erfahrung trösten können. Wenn nicht das, dann hoffe ich zumindest, dass Sie etwas gelernt haben oder vielleicht sogar gelacht haben!
In dieser Spaghetti-Code-Hassgeschichte...
Beginnen wir also damit, was ist Spaghetti-Code 🙄?
Spaghetti-Code ist das, was passiert, wenn man Code schreibt, der nicht den Grundsätzen der Softwareentwicklung entspricht. Ich hoffe, dass am Ende dieses Artikels klar sein wird, was Spaghetti-Code ist, oder zumindest wie er aussieht (und was man nicht tun sollte).
Die formale Bedeutung von Spaghetti-Code ist das, was passiert, wenn Sie so genannte tiefe oder breite Abhängigkeiten haben. Damit meine ich, dass Ihr Code von zu vielen oder zu wenigen Teilen Ihrer Anwendung abhängt, um korrekt zu funktionieren.
Aber es gibt viele verschiedene Vorstellungen davon, was Spaghetti-Code ausmacht. Meine Lieblingsdefinition stammt von Alex Martelli: "Spaghetti-Code ist das, was passiert, wenn man sich nicht an die Regeln der korrekten Top-Down-Dekomposition hält".
Für diejenigen, die mit dem Begriff "Top-down" nicht vertraut sind, möchte ich Wikipedia zu diesem Thema zitieren: "Beim Top-down-Design, das auch als hierarchisches Design bezeichnet wird, werden zunächst High-Level-Module und dann sukzessive Sub-Module definiert, bis einzelne Routinen festgelegt sind."
Das bedeutet, dass ein ideales Stück Spaghetti von dem, was derzeit geschrieben ist, zu dem wird, was der Code tun sollte, indem er diese Schritte befolgt:
1) Finde heraus, was dieses Stück Spaghetti macht.
2) Wenn das, was er derzeit tut, nicht das ist, was er tun sollte, schreiben Sie ihn so um, dass er das tut, was er tun muss (diese Phase kann in das unterteilt werden, was Ihr Code tun soll).
3) Schreiben Sie den Code.
4) Wiederholen Sie den Vorgang, bis alle Spaghetti durch einen spaghettifreien Code ersetzt wurden.
In den meisten Fällen werden die Punkte 3 und 4 jedoch einfach übersprungen und direkt zu 2 oder 1 (meist 1) übergegangen, um dann wie verrückte Wissenschaftler ohne Rücksicht auf saubere Code-Praktiken loszukodieren.
Wie erkennt man Spaghetti-Code?
Wenn Ihr Code wie ein schwer zu durchschauendes Durcheinander aussieht, ist das wahrscheinlich der erste Hinweis. Für noch schwieriger zu identifizierende Spaghetti-Codes finden Sie hier einige weitere Hinweise:
- Wenn die Bearbeitung Ihres Codes oder das De-Bugging zu großer Frustration führt, handelt es sich wahrscheinlich um Spaghetti-Code.
- Wenn kein Entwickler mit Ihnen an einem bestimmten Projekt arbeiten oder Ihren PR-Antrag prüfen möchte, besteht die Wahrscheinlichkeit, dass es sich um Spaghetti-Code handelt.
- Wenn Ihr Vorgesetzter wahllos Wutausbrüche gegen Sie hat - dann schreiben Sie wahrscheinlich viel Spaghetti-Code.
Machen Sie sich keine Sorgen, wenn eines dieser Beispiele auf Sie zutrifft. Was zählt, ist, wie Ihr Spaghetti-Code Ihrer Meinung nach aussieht - es ist wahrscheinlich, dass das, was Sie jetzt für schlecht halten, nach dem Lesen dieses Artikels noch viel schlimmer aussieht.
Wie sieht also Spaghetti-Code aus?
Das hängt davon ab, in welcher Sprache Sie schreiben und welches Framework bzw. welche Bibliotheken verwendet werden. Hier zeige ich einen Spaghetti-Code, der in JavaScript geschrieben wurde und jQuery als Beispiel verwendet:
function KFCSecretMenu() { //Konstruktor
this.getKrushers = function() {
} } $(document).ready(function(){ //event listener for DOM Ready $(‘.welcome’).click(function (){ //event listener for click on element with class name of welcome $(‘.menu-item’).addClass(‘active’); //class to be added if the submenu is opened.
$(‘.menu-item’).find(‘.description’).slideDown(); //sliding down effect for description text }) }); function MenuItemClicked (e) { var itemID = $(e.target).parent().attr(‘id’); //gets ID of parent menu item var description = $(e.target).next().text() KFCSecretMenu.getKrushers({‘itemID’:itemID,’description’:description}); //calling function below }
Folgen? Nein, es sind wirklich Spaghetti! 🕵️
Wir werden uns ansehen, was diesen Spaghetti-Code so schlecht macht, was ihn spaghettiger als andere macht und was Sie tun können, um ihn zu reparieren. Was also macht Spaghetti-Code so schlecht? Ich denke, dies ist die nützlichste Liste von Dingen, die Spaghetti-Code zu dem machen, was er ist: Doppelte oder übermäßig komplexe Funktionen, Methoden und Variablen Schwer nachvollziehbare und/oder nicht eingerückte Strukturen Schwer nachvollziehbare und/oder lange Funktionen Schwer lesbarer Leerraum Schwer nachvollziehbare Logik Fehlende Kommentare Ungewöhnliche Codierungsstile (zu sehr bemüht) Gute Variablennamen.
Es gibt auch einige andere Dinge, die Ihren Code zu einem heillosen Durcheinander machen, die aber nicht unbedingt als Spaghetti-Code gelten: Ineffiziente Algorithmen Große Dateigröße Schlecht konzipierte Software Fehlende Tests Spaghetti-Code sieht in jeder Sprache, jedem Framework und jeder verwendeten Bibliothek anders aus - was in der einen Sprache Spaghetti ist, muss in einer anderen nicht unbedingt Spaghetti sein. Das macht es schwer zu definieren, wie Spaghetti-Code aussieht. Denken Sie einfach daran, was vor ein paar Jahren für Sie Spaghetti-Code gewesen wäre - was waren die größten Probleme mit Ihrem Code? Wahrscheinlich haben Sie einige der Fehler aus der obigen Liste gemacht. Vergleichen Sie also, was an diesen vergangenen Codestücken schlecht war, und versuchen Sie, diese Liste im Kopf zu behalten, während Sie diesen Artikel lesen.
Sie haben also Ihren Spaghetti-Code identifiziert, wie geht man damit um?
Bevor wir mit der Diskussion darüber beginnen, wie wir unser Stück Spaghetti... äh, ich meine Code, in das verwandeln, was es sein soll, sind einige wichtige Dinge zu beachten:
Anmerkung 1: Es gibt Hunderte (vielleicht Tausende) von Möglichkeiten, wie Sie Ihren Code NICHT schreiben sollten. Ich versuche, dies so einfach wie möglich zu halten. Der Kontext dessen, was ich hier schreibe, richtet sich an diejenigen, die nur sehr grundlegende Kenntnisse über das Schreiben von Code haben. Sie werden überrascht sein, was Sie alles erreichen können, wenn Sie einfach etwas Leerraum und Kommentare hinzufügen!
Hinweis 2: Es ist wichtig, dass Sie verstehen, was Sie tun, bevor Sie versuchen, Spaghetti-Code selbst zu reparieren - sonst machen Sie es nur noch schlimmer! Wenn nicht, lesen Sie diesen Artikel noch einmal, bis Sie ihn verstehen - und kommen Sie dann hierher zurück.
Anmerkung 3: Wir untersuchen gerade, was Ihre Spaghetti unordentlich macht, was wir jedoch nicht untersuchen, ist, was dies überhaupt verursacht haben könnte (und uns daher veranlassen sollte, zweimal nachzudenken, bevor wir unseren Editor öffnen).
Was sind die Vorteile von Spaghetti-Code?
Nichts. Nächster Punkt!
Wie kann man zukünftigen Spaghetti-Code verhindern?
Abgesehen davon, dass Sie nach Italien ziehen und jedes Mal, wenn Sie eine Zeile unsauberen Code schreiben, von einem sehr wütenden italienischen Mann mit einem Haufen roher Spaghetti über den Kopf geschlagen werden, könnten Sie diese Dinge versuchen...
- Ein guter Weg, um Spaghetti-Code zu vermeiden, ist es, Ihre Funktionen und Methoden kurz zu halten. Das bedeutet, dass eine Funktion nur das tun sollte, was sie tun soll. Es gibt keinen Grund für eine Funktion, die 10 verschiedene Dinge tut oder 100 Zeilen hat - entfernen Sie, was nicht notwendig ist!
- Ein weiterer Tipp, um Spaghetti-Code zu vermeiden, besteht darin, zu verhindern, dass das, was getan wurde, geändert wird - was ich damit meine, ist, dass Sie versuchen sollten, Schleifen nicht tief in andere Schleifen zu verschachteln, oder mit anderen Worten: verschachteln Sie nicht, was nicht verschachtelt werden muss!
- Vergessen Sie auch nicht die Formatierung des Codes: Leerraum und Einrückung können bei Spaghetti-Code wahre Wunder bewirken! Je ansprechender der Code aussieht, desto leichter ist er zu lesen.
- Rückblicke - überprüfen Sie immer, was gut gelaufen ist, damit Sie dies nachverfolgen und beim nächsten Mal umsetzen können!
- Alternativ könnten Sie auch Ihre Codierung verbessern
- Ein letzter Tipp, wenn Sie planen, wie Ihr Spaghetti-Code aussehen soll: Versuchen Sie, Graphen zu zeichnen, was Sie tun wollen, anstatt Ihren Code direkt in Ihrem Editor zu schreiben (d. h. schauen Sie sich an, was jede Funktion tun muss, bevor Sie sie tatsächlich implementieren). Wenn das schief geht, gehen Sie einen Schritt zurück und beginnen Sie von vorne.
Wenn Sie diese einfachen Regeln befolgen, kann ich fast garantieren, dass das, was Sie schreiben, nicht zu Spaghetti wird - aber was weiß ich schon? Vielleicht ist das, was Ihre Tante als Spaghetti bezeichnet hat, in Wirklichkeit verkleideter Spaghetti-Code.
Abschließende Gedanken zum Spaghetti-Code
Sie könnten auch versuchen, Ihre Spaghetti zu umarmen und sie als einzige Quelle der Freude in Ihrem Leben zu lieben! Wenn das für Sie nicht funktioniert, gibt es dieses hervorragende GIF, das die Alternative simuliert.
Wenn alles andere fehlschlägt, können Sie einfach Ihre Programmierkenntnisse verbessern. Aber im Ernst, das sollte das letzte, letzte, letzte, letzte sein, was Sie tun sollten!