Es stinkt, weil es wahrscheinlich viele Fälle gibt, in denen es bearbeitet oder verbessert werden könnte.
Die meisten dieser Gerüche sind nur Hinweise darauf, dass etwas nicht stimmt. Daher ist es nicht erforderlich, sie per se zu reparieren ... (Sie sollten sich jedoch darum kümmern.)
Alle bisherigen Code-Smells (Teil I – XXXIII) finden Sie hier .
Lass uns weitermachen...
Schwerwiegender Fehler: Nicht erfasster Fehler: Klasse „logs_queries_web“ nicht in /var/www/html/query-line.php:78 gefunden
Stack-Trace: #0 {main} wird in /var/www/html/query-line.php in Zeile 718 geworfen
TL;DR: Erkennen Sie Ihre Fehler. Sogar die, die Sie nicht erwarten.
Verwenden Sie einen Handler der obersten Ebene.
Vermeiden Sie Sprachen, die Rückgabecodes bevorzugen.
Erwarten Sie Datenbank- und Low-Level-Fehler.
Selbst im Jahr 2022 können wir „seriöse“ Websites sehen, die gelegentlichen Benutzern eine Stack- oder Debugging-Meldung anzeigen.
<? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9
<? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");
Wir können Mutationstests verwenden, um Probleme zu simulieren und zu sehen, ob sie richtig behandelt werden.
Wir müssen weiter reifen.
Unsere Lösungen sollten nicht schlampig sein.
Wir müssen unseren Ruf als seriöse Softwareentwickler verbessern.
Code Smells sind nur meine Meinung .
Foto von Jesse Orrico auf Unsplash
80 Prozent meiner Probleme sind einfache Logikfehler. 80 Prozent der verbleibenden Probleme sind Zeigerfehler. Die verbleibenden Probleme sind schwierig.
Mark Donner
Tolle Zitate zum Thema Software-Engineering
Hashing garantiert, dass zwei Objekte unterschiedlich sind. Nicht, dass sie gleich wären.
TL;DR: Wenn Sie den Hash prüfen, sollten Sie auch die Gleichheit prüfen
Am 7. Oktober 2022 musste eine der größeren Blockchains gestoppt werden.
Diese Nachricht war schockierend, da die meisten Blockchains per Definition dezentralisiert sind.
Den vollständigen Artikel können Sie hier lesen:
Wie ein Hacker 566 Millionen US-Dollar stahl, indem er einen Code-Smell ausnutzte
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }
Viele Linters haben Regeln für die Neudefinition von Hash und Gleichheit.
Mit Mutationstests können wir verschiedene Objekte mit demselben Hash versehen und unsere Tests überprüfen.
Jede Leistungsverbesserung hat ihre Nachteile.
Caches und Replikationen sind bemerkenswerte Beispiele.
Wir können (müssen) sie mit Bedacht nutzen.
Code Smell 150 – Gleicher Vergleich
Code Smells sind nur meine Meinung .
Das wird einige Ihrer Leser überraschen, aber mein Hauptinteresse gilt nicht der Computersicherheit. Mein Hauptinteresse liegt darin, Software zu schreiben, die wie vorgesehen funktioniert.
Wietse Venema
Tolle Zitate zum Thema Software-Engineering
Wir müssen einige Änderungen vornehmen. Wir müssen uns darüber im Klaren sein, warum
TL;DR: Seien Sie bei Ihren Design- oder Implementierungsentscheidungen deklarativ.
Manchmal finden wir, dass willkürliche Regeln nicht so leicht überprüfbar sind.
Wenn wir einen fehlgeschlagenen Test nicht schreiben können, benötigen wir anstelle eines Kommentars eine Funktion mit einem hervorragenden und deklarativen Namen.
// We need to run this process with more memory set_memory("512k) run_process();
increase_memory_to_avoid_false_positives(); run_process();
Das ist ein semantischer Geruch.
Wir können Kommentare erkennen und uns warnen.
Code ist Prosa. Und Designentscheidungen sollten narrativ sein.
Code Smell 05 – Kommentarmissbraucher
Code Smell 75 – Kommentare innerhalb einer Methode
Code Smells sind nur meine Meinung .
Foto von Goh Rhy Yan auf Unsplash
Programme altern, genau wie Menschen. Wir können die Alterung nicht verhindern, aber wir können ihre Ursachen verstehen, ihre Auswirkungen begrenzen und einen Teil der Schäden rückgängig machen.
Mario Fusco
Tolle Zitate zum Thema Software-Engineering
Machen Sie nicht zwei oder mehr Dinge auf einmal.
TL;DR: Versuchen Sie, Ihre Methoden so atomar wie möglich zu gestalten
https://maximilianocontieri.com/refactoring-002-extract-method
Wenn Sie eine Methode mit „Und“ benennen, verpassen Sie wahrscheinlich die Möglichkeit, eine Methode zu extrahieren und zu unterbrechen.
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
Einige Linters können uns vor Methoden warnen, die den Begriff „und“ enthalten.
Bei der Entwicklung von Methoden ist es sehr wichtig, eine Gummi-Enten-Geschichte zu spielen und uns selbst zu sagen, ob wir die Dinge richtig machen.
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
Code Smells sind nur meine Meinung .
Foto von Scott Sanker auf Unsplash
Das Erlernen der Programmierkunst besteht wie bei den meisten anderen Disziplinen darin, zunächst die Regeln zu lernen und dann zu lernen, wann man sie brechen muss.
Joshua Bloch
Die Entwicklung ist großartig. Refactoring ist erstaunlich. Machen Sie es nicht gleichzeitig
TL;DR: Führen Sie nicht gleichzeitig eine Funktionsänderung und ein Refactoring durch.
Manchmal stellen wir fest, dass für die weitere Entwicklung ein Refactoring erforderlich ist.
Wir sind Experten im Lernen.
Wir sollten unsere Lösung auf Eis legen. Arbeiten Sie an der Umgestaltung und fahren Sie mit unserer Lösung fort.
getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code
getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename
Das ist ein Refactoring-Geruch.
Wir sollten einen physischen Token verwenden.
Entweder befinden wir uns in der Refactoring-Phase oder in der Entwicklungsphase.
Code Smells sind nur meine Meinung .
Foto von Dannie Jing auf Unsplash
Wenn ich Code studiere, führt mich Refactoring zu einem höheren Verständnisniveau, das mir sonst entgehen würde. Diejenigen, die Comprehension Refactoring als nutzloses Herumspielen am Code abtun, erkennen nicht, dass sie nie die Chancen erkennen, die sich hinter der Verwirrung verbergen.
Martin Fowler
5 weitere Code-Smells folgen in Kürze…