Clean Code Flashcards
Was bedeutet das Law “Don’t talk to Strangers?0” und was sind die Probleme?
- Eine Variable/Ergebniss wird einer riesigen Verkettung an Objekten, Funktionen, Arrays zugewiesen
- Es ist sehr intransparent was denn eigentlich wirklich am Ende zugewiesen wird und wo in der Verkettung was drinnen steckt.
Wie sieht ein Paradebeispiel für das Law “Don’t talk to Strangers” aus und wie sieht es behoben aus?
int i = getObjectA().getObjectB().getSomeOtherObject().getArray()[0];
-Man sollte nur auf folgendes zugreifen: Parameter this.* (Klassenattribute) * = new ... (neues Objekte) this.myVariable.*
-Beheben kann man es wenn man die Methode z.B. in eine andere Klasse ausgliedert, da sie anscheinend in die jetzige Klasse nur schwer hineinpasst.
Was ist heißt das DRY-Prinzip?
-Don’t Repeat Yourself
Was bedeutet das DRY-Prinzip und wie behebt man es?
- Ein Entwickler kopiert Stellen im Code
- Man gliedert doppelte Codestellen in Methoden/Funktionen aus
- JEDES MAL beim Copy und Pasten nachdenken, ob man nicht ausgliedern sollte
Warum ist das Nicht-Einhalten vom DRY-Prinzip schlecht?
- Die allermeisten Fehler im Code geschehen durch Copy und Paste
- Besonders wenn Schleifen einfach an mehreren Stellen kopiert werden entstehen Logikfehler
- Man erzeugt unnötig viel Code und Komplexität die das Programm später kaum wartbar macht.
Was sind übliche Probleme mit Kommentaren?
- Oftmals ist Code entweder in einen Roman verwandelt und man sieht den Code kaum vor Erklärung.
- Oder Code besitzt gar keine Erklärungen und ist unwartbar.
Was sollte kommentiert werden?
- Performenzprobleme mit weirden Verhalten (z.B. Kann mehrere Tage Laufzeit haben)
- RegEx erklären
- TODO für noch nicht implementierte Routen/Verhalten
- Lizenzen
Was sind unnötige Kommentar?
-Erklärungen für selbstverständliches //Der Name des Kontos int name;
-ausgelagerte If Abfragen brauchen oft keinen Kommentar, da der Methodenname es erklärt //unnötige Kontogedeckt Erklärung if(this.kontoGedeckt()){}
-
Was ist bedeutet Prinzip der kleinsten Überraschung und was sind die Probleme?
- Namensgebungen sind irreführend
- Eine Methode hat einen ganz unvermeintlichen Namen (getFile) und sollte z.B. nur eine Datei einlesen aber in der Methode ist viel mehr Komplexität und Manipulation der Daten versteckt (Die Atombombe) was man nicht erwartet.
Wie geht man mit dem Prinzip der kleinsten Überraschung richtig um?
- Methoden sollten einfach gehalten werden und nur das ausführen was von ihrem Namen ablesbar ist
- Eine Klasse Konto braucht als Attrribut keinen “kontonamen” sondern einfach nur einen namen, denn man weiß, dass es sich um das Konto handelt.
Wie sollte man an den Prozess des Code-Schreibens herangehen?
- Man kann niemals die ganze Applikation beim ersten Schreiben korrekt coden.
- Daher erst einmal zügig die App zuende schreiben, auch wenn es Problemstellen gibt funktionabel machen
- Dann erneut durch den funktionierenden Code gehen und alle Probleme verbessern und verschönern.
- Dann ein drittes Mal den Code durchdenken und aufpolieren damit er releaseready wird.
Wofür steht das YAGNI Prinzip?
-You ain’t gonna need it
Was bedeutet das YAGNI Prinzip?
- Man sollte sich nicht mit zu vielen Methoden befassen, die man am Ende gar nicht benötigt.
- Erstmal eine Basisversion der App bauen und erst danach an die Features erweitern
Was bedeutet das Single Responsibility Prinzip?
- Nur eine große Funktionalität in einer Klasse anbieten
- Die Klasse myConnector soll nur connecten und nicht auch Methoden zum Dateien empfangen oder send0en bereitstellen, dass sollte in eine andere Klasse ausgegliedert werden
- Klassen mit übet 15 Methoden sind verdächtige Kandidaten zum Zerlegen.
Was ist das Open-Close-Prinzip?
- Es kann offen erweitert werden
- Aber es muss nicht dafür verändert werden
- Klasse Shape iteriert durch übergebene Formen und zeichnet jede Shape egal ob es mal Rechtecke oder Kreise geben wird.