Begriff
Clean Code
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Code wird nur einmal geschrieben, aber 100 Mal gelesen. Von dir (in 6 Monaten) oder von Kollegen. Clean Code ist Code, den man sofort versteht. Wie ein gut geschriebenes Buch.
- Schlechte Variable:
d(Tage? Datum? Dicke?). - Gute Variable:
daysSinceLastLogin. Clean Code hat keine Überraschungen. Wenn du beim Lesen den Kopf runzeln musst ("WTF?"), ist es kein Clean Code.
Merksatz: Ein Entwicklungsstandard, der Lesbarkeit, Einfachheit und Wartbarkeit von Quellcode priorisiert, damit Software langfristig erweiterbar und fehlerfrei bleibt.
Regeln aus dem Buch "Clean Code" (Uncle Bob):
- Aussagekräftige Namen:
getUserInfo()stattfunc1(). - Kleine Funktionen: Eine Funktion sollte 5-10 Zeilen haben und genau eine Sache tun.
- Wenige Argumente:
saveUser(user)ist besser alssaveUser(name, email, age, address, phone...). - Keine Kommentare: Guter Code erklärt sich selbst. Kommentare lügen (weil man vergisst, sie zu updaten). Kommentiere das Warum, nicht das Was.
1. Cyclomatic Complexity
Ein Maß für "Unsauberkeit".
Wie viele if, for, while Pfade gibt es durch deine Funktion?
Je höher die Zahl (> 10), desto schwerer ist sie zu testen.
Clean Code drückt die Komplexität nach unten (durch Aufteilen in Unter-Funktionen).
2. Side Effects
Eine Funktion checkPassword() sollte prüfen, ob das Passwort stimmt.
Wenn sie heimlich auch noch den User einloggt (Session setzt), ist das ein Side Effect.
Das ist eine Lüge im Funktionsnamen.
Führt zu Bugs ("Warum bin ich eingeloggt? Ich wollte nur prüfen!").
Trenne Command (Tu was) und Query (Frag was). CQS-Prinzip.
3. The Scout Rule
Siehe Refactoring. Clean Code ist kein Zustand, sondern ein Prozess. Code verrottet (Bit Rot), wenn man ihn nicht pflegt. Jedes Ticket muss den Code ein bisschen sauberer hinterlassen.
1. SOLID-Prinzipien
Clean Code auf Klassen-Architektur-Ebene.
Das Wichtigste ist das S (Single Responsibility Principle): Eine Klasse (Modul) sollte exakt einen einzigen Grund haben, sich zu ändern. Wenn die Klasse User sowohl E-Mails verschickt als auch CSV-Datenbank-Exports macht, bricht sie dieses Prinzip.
Das O (Open/Closed Principle) besagt: Wenn du ein neues Feature baust, solltest du neuen Code hinzufügen (Erweitern, z.B. über Interfaces), anstatt bestehenden Code anfassen und ändern zu müssen.
2. The Law of Demeter (LoD)
Auch bekannt als "Prinzip des geringsten Wissens".
Ein Objekt darf nur mit seinen direkten Freunden reden, nicht mit den Freunden seiner Freunde.
Schmutziger Code (Train Wreck):
user.getAccount().getBilling().getPlan().cancel();
Hier muss User die gesamte interne Struktur von Billing und Plans kennen. Ändert sich das Plan-System, bricht User.
Clean Code kapselt Logik:
user.cancelPlan();
Wie das intern in abstrakten Schichten passiert, ist die alleinige Verantwortung des User-Objektes, nicht des Aufrufers.
3. Code Smells
Symptome (Ruch) von extrem verrottetem Code, die meistens auf katastrophale Architektur-Entscheidungen hindeuten:
- God Object: Eine Klasse
Manager, die 4000 Zeilen lang ist und gefühlt die gesamte App kontrolliert. - Shotgun Surgery: Du willst ein Feature ("MwSt. auf 19% ändern") integrieren und musst dafür in 15 verschiedenen Dateien einzeln Code anpassen. (Klare Verletzung von DRY - Don't Repeat Yourself).
- Primitive Obsession: Eine Adresse wird nicht als Objekt
Address()übergeben, sondern als sechs einzelne Strings(street, zip, city...)quer durch zwanzig Funktionsebenen geschleift.
Quick-Check
Coding Standard?
Ein Dokument im Team, das regelt: "Wir schreiben Klammern so:{". Linter setzen das automatisch durch. Hilft Clean Code, ersetzt ihn aber nicht (eine sinnlose Funktion kann perfekt formatiert sein).Magic Numbers?
Zahlen ohne Erklärung im Code (if status == 2). Ersetze sie durch Konstanten (if status == USER_BANNED).Ist kürzer immer besser?
Nein.a ? b : cist kurz. Aberif (isAdmin) { showAdminPanel() }ist lesbarer. Clarity over Brevity.