Aikido

Warum man auskommentierten Code aus der Codebasis entfernen sollte

Lesbarkeit

Regel
Entfernen auskommentiert Code Blöcke

Auskommentierte Code erzeugt Rauschen, wird veraltet 
und gehört in Version Kontroll Geschichte, nicht der Codebasis.

Einleitung

Auskommentierter Code sammelt sich an, wenn Entwickelnde unsicher sind, ob sie alte Logik später noch benötigen. Jemand kommentiert eine Funktion „nur für den Fall“ aus, anstatt sie zu löschen, und sie bleibt für immer dort. Niemand weiß, ob dieser Code noch funktioniert, warum er deaktiviert wurde oder ob er sicher entfernt werden kann. Die Codebasis füllt sich mit Geistern vergangener Implementierungen, die vom Verständnis dessen ablenken, was tatsächlich in Produktion läuft.

Warum es wichtig ist

Code-Wartbarkeit: Auskommentierter Code zwingt Lesende, mental zu filtern, was real und was inaktiv ist. Während eines Code-Reviews lässt sich nicht erkennen, ob diese Blöcke temporäre Experimente, wichtige Rollback-Optionen oder vergessene Überbleibsel von vor Jahren sind. Dieses Rauschen erschwert es, die tatsächliche Logik zu verstehen, relevante Code-Abschnitte zu finden und Änderungen sinnvoll zu überprüfen.

Sicherheitsimplikationen: Auskommentierte Authentifizierungsprüfungen, Validierungslogik oder Sicherheitsfunktionen zeigen, dass diese Schutzmaßnahmen existierten, aber absichtlich deaktiviert wurden. Wenn der auskommentierte Code Anmeldeinformationen, API-Schlüssel oder interne URLs enthält, liefern Sie diese sensiblen Daten im Klartext aus. Angreifer, die Ihren Code überprüfen, sehen genau, welche Sicherheitsmaßnahmen Sie in Betracht gezogen und entfernt haben.

Versionskontroll-Verwirrung: Git-Diffe werden durch auskommentierte Blöcke überladen, die sich eigentlich nicht ändern. Wenn Sie nachvollziehen müssen, wann sich die Logik geändert hat oder warum ein Feature auf eine bestimmte Weise funktioniert, verschleiern auskommentierte Alternativen die wahre Historie. Die Suche in der Codebasis liefert Treffer in totem Code, was Zeit bei der Untersuchung von Pfaden verschwendet, die nicht ausgeführt werden.

Code-Beispiele

❌ Nicht konform:

async function createUser(userData) {
    // const hashedPassword = await bcrypt.hash(userData.password, 10);

    const user = await db.users.create({
        email: userData.email,
        password: userData.password,
        // password: hashedPassword,
        role: userData.role || 'user'
    });

    // await sendWelcomeEmail(user.email);
    // await notifyAdmins(user);

    // Old validation approach
    // if (!isValidEmail(user.email)) {
    //     throw new Error('Invalid email');
    // }

    return user;
}

Warum es falsch ist: Das auskommentierte Passwort-Hashing zeigt, dass Passwörter im Klartext gespeichert werden, eine kritische Sicherheitslücke. Niemand weiß, ob die Willkommens-E-Mail und die Admin-Benachrichtigung aktiviert werden sollen, und die alte Validierung deutet darauf hin, dass eine E-Mail-Validierung fehlen könnte.

✅ Konform:

async function createUser(userData) {
    if (!isValidEmail(userData.email)) {
        throw new Error('Invalid email');
    }

    const hashedPassword = await bcrypt.hash(userData.password, 10);

    const user = await db.users.create({
        email: userData.email,
        password: hashedPassword,
        role: userData.role || 'user'
    });

    await sendWelcomeEmail(user.email);
    await notifyAdmins(user);

    return user;
}

Warum das wichtig ist: Die Funktion ist klar und vollständig und zeigt genau, was in der Produktion ausgeführt wird. E-Mail-Validierung läuft zuerst, Passwörter werden korrekt gehasht, und alle Benachrichtigungen werden ohne Unklarheiten darüber, was aktiviert ist, gesendet.

Fazit

Löschen Sie Code, anstatt ihn auszukommentieren. Ihr Versionskontrollsystem bewahrt jede jemals geschriebene Zeile auf, zugänglich über git log und git blame wenn Sie es brauchen. Kommentierter Code im Repository erzeugt nur Rauschen, das die eigentliche Logik verschleiert und Ihre Codebasis schwerer navigierbar macht.

FAQs

Haben Sie Fragen?

Was, wenn ich die alte Implementierung für ein Rollback benötige?

Verwenden Sie Feature Flags oder Versionskontroll-Branches, nicht Kommentare. Wenn Sie zu alter Logik zurückkehren möchten, implementieren Sie diese hinter einem Feature Flag, das Sie umschalten können. Für dauerhafte Änderungen löschen Sie den alten Code und verlassen sich auf die Git-Historie. Gelöschten Code können Sie bei Bedarf jederzeit mit git log -p oder git show wiederherstellen.

Wie gehe ich mit experimentellem Code während der Entwicklung um?

Führen Sie Experimente in separaten Branches durch oder kennzeichnen Sie sie mit Feature-Flags. Wenn Sie zwei Ansätze testen, erstellen Sie für jeden einen Branch oder verwenden Sie ein Konfigurations-Flag, um zwischen ihnen zu wechseln. Auskommentierter Code in Haupt-Branches deutet darauf hin, dass Sie nicht sicher sind, was in Produktion gehen soll, was ein Planungsproblem und kein Versionskontrollproblem ist.

Was ist mit dem temporären Deaktivieren von Code während des Debuggings?

Das ist in Ordnung für lokale Debugging-Sessions, aber committen Sie es niemals. Verwenden Sie git add -p, um auskommentierten Debug-Code vor dem Committen zu überprüfen und auszuschließen. Wenn Sie Code teamübergreifend temporär deaktivieren müssen, verwenden Sie Feature Flags oder Konfiguration anstelle von Kommentaren.

Sollte ich auch kommentierte Erläuterungen entfernen?

Nein, diese Regel zielt auf auskommentierte Codeblöcke ab, nicht auf Dokumentationskommentare. Erläuternde Kommentare, die beschreiben, warum oder wie etwas funktioniert, sind wertvoll. Das Problem sind Blöcke von auskommentiertem ausführbarem Code, die möglicherweise nicht mehr relevant sind.

Was, wenn kommentierter Code alte Implementierungsansätze dokumentiert?

Dokumentieren Sie den Ansatz in einem Kommentar, der ihn beschreibt, anstatt toten Code beizubehalten. Schreiben Sie „zuvor wurde Ansatz X verwendet, zu Y gewechselt, weil Z“, anstatt beide Implementierungen auskommentiert zu lassen. Historischer Kontext gehört in Commit-Nachrichten und Designdokumente, nicht in ruhende Codeblöcke.

Werden Sie jetzt sicher.

Sichern Sie Ihren Code, Ihre Cloud und Ihre Laufzeit in einem zentralen System.
Finden und beheben Sie Schwachstellen schnell und automatisch.

Keine Kreditkarte erforderlich | Scan-Ergebnisse in 32 Sek.