Ist das Schreiben von redundantem Code eine schlechte Praxis?

Beste Antwort

Ja, Sie werden tausende Male dieselben Sortierungen und Such- und Zeichenfolgenbehandlungsfunktionen schreiben, jede nur geringfügig Variation des letzten Males.

Dies ist so wahr, dass in der Wissenschaft eine Philosophie entstanden ist, die dies leugnet und die vorgibt, dass es eine Möglichkeit gibt, nicht denselben Code zu überschreiben und darüber hinaus.

Dieses dumme Mantra muss wirklich aus den Menschen herausgeschlagen werden.

Intelligentes Design bedeutet, nicht jedes Mal von vorne anfangen zu müssen, und intelligentes Codieren bedeutet, zu wissen, wann etwas geschrieben werden muss neu und wann Code wiederverwendet werden muss.

Die Wiederverwendung von Code als zeitsparende, debugsparende Maßnahme hat ihre Vorzüge, wenn sie verfügbar ist. Dies hat sich zu nützlichen Tools wie Generika und Vorlagen sowie dem Konzept der Vererbung und universellen APIs entwickelt, sodass das Sortieren und Suchen generisch wird, anstatt dass für jeden Array- oder Listentyp eine neue Suchfunktion geschrieben werden muss.

Das Kopieren von Codetext wird als der schlimmste Fehler angesehen, da es Fehler kopiert und Code aufbläht und in erster Linie als redundant angesehen wird.

Hier glänzt die Vererbung als Strategie zur Code-Reduzierung. Unterklassen müssen keine teuren Umschreibungen ihrer Basisklassen sein, wenn der größte Teil der allen Unterklassen gemeinsamen Funktionen in der Basisklasse enthalten ist. Oft kann die Unterklasse die Basisklassenfunktion aufrufen und dann selbst einige Änderungen vornehmen, anstatt die gesamte Funktion neu zu implementieren. Das ist es, worüber sie sprechen.

Aber das „Dont Repeat Yourself“ hat in Foren wie diesem Kultstatus als eine Art ideale Methode zum Codieren und Entwerfen erlangt, und es ist einfach nicht wahr oder praktisch oder Teil eines wichtigen realen Code-Körpers.

Überdesign ist für Sprachentwickler, Theoretiker und Framework-Ersteller gedacht. Praktische Programmierer schreiben einfach Code, der funktioniert, und wenn Ihr Programm zwei Klassen hat, die beide die binäre Suche implementieren, na und? Benötigen Sie wirklich eine dritte Klasse mit Unterklassen, um binäre Suchen für die beiden anderen Datenklassen durchzuführen? Vielleicht, aber hier geht es darum, eine Größe von Datenklassen zu vergrößern, die eine binäre Suche benötigen. Dann wird es zu einer Echtzeit- und Fehlerersparnis, eine Klasse zu haben, die dies korrekt ausführt und in Unterklassen unterteilt werden kann, um die Anforderungen der Datenklassen zu erfüllen. Siehe?

Das Programmieren im Großen erfordert viel mehr Planung und Analyse der Arbeitsteilung als das Programmieren kleiner Jobs und Tools. Ja, wenn Sie ein Projekt mit mehr als 1000 Codezeilen haben, schauen Sie sich das Design an und finden Sie redundante Algorithmen und Funktionen. Entscheiden Sie, ob Sie sie in einer oder zwei funktionalen Dienstprogrammklassen zusammenfassen und Code für alle Datenobjekte gemeinsam nutzen können. Aber machen Sie es nicht zu einem religiösen Streben nach endgültiger Beseitigung von Redundanzen. Und glauben Sie nicht denen, die dies tun.

Antwort

Wenn dies die effizienteste Option ist, ist dies keine schlechte Praxis. alles zu tun, eine einfachere, elegantere Lösung bietet, ist jedoch eine schlechte Praxis

In diesem Fall kann ein riesiger Switch häufig durch eine Schnittstelle ersetzt werden oder es einer Klasse ermöglichen, ihre eigene Verantwortung zu übernehmen usw.

Zum Beispiel, wenn Sie so etwas haben :

Diese funktioniert . Der Code ist ziemlich robust, solange Werte nur hinzugefügt und nicht bearbeitet werden, und er ist sogar ziemlich effizient, da Bitvergleiche praktisch keine Zeit benötigen. Dies gerät jedoch außer Kontrolle, ist schwer zu navigieren und Sie müssen bereits diese Fahrzeugklassen sowieso definieren.

Beginnen wir stattdessen mit so etwas:

Wieder hatten wir dies wahrscheinlich sowieso, nur ohne die numberOfCylinders-Methode, und so jetzt unsere erste Die Methode sieht einfach so aus:

Stellen Sie sich jetzt für einen Moment vor, wir sind ein nationales Autoteilegeschäft und haben es buchstäblich Tausende von Autos verschiedener Marken, Modelle, Verkleidungen usw. Das wäre ein riesiges Monster, unmöglich zu lesen, extrem schwer zu ergänzen oder zu entfernen usw.

Also noch einmal , es ist nicht immer eine schlechte Praxis, und manchmal brauchen wir einen großen Schalter oder ähnliches, sondern Normalerweise gibt es einen einfacheren Weg, sich dort zu verstecken.

BEARBEITEN: Es gibt viele Kommentare zu a n extrem große Anzahl von Fahrzeugkombinationen (möglicherweise Millionen in der Geschichte) und Klassen, die hier ein Versagen des Autos implementieren. Natürlich werden Klassen zu einem bestimmten Zeitpunkt nicht mehr funktionieren, und Sie würden Flatfiles in einer Datenbank speichern und einen Accessor verwenden.

Meine Antwort sollte die Gefahr einer sehr langen Verwendung aufzeigen Bedingte Anweisungen, nicht als tatsächlicher Versuch, eine Autoteile-Speicherarchitektur zu erstellen.Wenn Sie bei einem großen Autohändler arbeiten, nehmen Sie bitte meine einfache Antwort nicht als Grundlage für Ihre Softwarearchitektur 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.