Regel
Entfernen Sie unerreichbaren toten Code
Unerreichbarer Code ist verwirrend,
unprüfbar und sollte entfernt werden.
Unterstützte Sprachen: 45+Einleitung
Unerreichbarer Code signalisiert fehlerhafte Logik in Ihrer Codebasis. Code nach Rückgabe oder werfen Anweisungen wurden zum Ausführen geschrieben, laufen aber nie. Bedingungen, die immer falsch sind, verbergen Validierungs- oder Fehlerbehandlungsroutinen, die nie ausgelöst werden. Zweige, die die Logik aufgrund des Kontrollflusses nie erreicht, enthalten Funktionalität, die nicht ausgeführt werden kann. Wenn Sie unerreichbaren Code finden, haben Sie einen Fehler entdeckt, bei dem Ihr Code nicht das tut, was er tun sollte.
Warum es wichtig ist
Sicherheitslücken: Unerreichbare Sicherheitsprüfungen schützen Ihre Anwendung nicht. Wenn Authentifizierung, Autorisierung oder Eingabevalidierung nach einer Rückgabe Anweisung, Ihr Code sieht sicher aus, ist es aber nicht. Angreifer können Funktionen ausnutzen, die Sicherheitsmaßnahmen zu haben scheinen, diese aber tatsächlich umgehen. Code-Reviews könnten diese Schwachstellen übersehen, da die Sicherheitslogik zwar in der Codebasis existiert, aber nie ausgeführt wird.
Logikfehler in der Produktion: Toter Code bedeutet, dass Ihre Funktion nicht die Logik implementiert, die Sie erwarten. Validierungen, die nie ausgeführt werden, lassen ungültige Daten passieren. Unerreichbare Fehlerbehandlung bedeutet, dass Fehler unentdeckt weitergegeben werden. Umgegangene Geschäftsregeln führen zu falschen Ergebnissen. Der Code sieht korrekt aus, verhält sich aber anders als beabsichtigt.Testlücken: Unerreichbarer Code kann nicht getestet werden. Wenn Ihre Testsuite trotz unerreichbaren kritischen Codes erfolgreich ist, bedeutet dies, dass Sie keine Tests haben, die diese Pfade abdecken. Unerreichbarer Code offenbart Lücken in Ihrer Testabdeckung, wo wichtige Logik existiert, aber keine Tests deren Ausführung überprüfen.
Auswirkungen auf die Bundle-Größe: Unerreichbarer Code wird immer noch als Ballast in Ihrem JavaScript-Bundle an Benutzer ausgeliefert. Benutzer laden Code herunter und parsen ihn, der niemals ausgeführt wird, aber dies ist zweitrangig gegenüber den Logikfehlern, die toter Code anzeigt.
Code-Beispiele
❌ Nicht konform:
function transferFunds(fromAccount, toAccount, amount) {
if (!fromAccount || !toAccount) {
return { success: false, error: 'Invalid accounts' };
}
if (amount <= 0) {
return { success: false, error: 'Invalid amount' };
logSuspiciousActivity(fromAccount, amount);
}
const balance = getBalance(fromAccount);
if (balance >= amount) {
deductFunds(fromAccount, amount);
addFunds(toAccount, amount);
return { success: true };
}
return { success: false, error: 'Insufficient funds' };
// Check for fraud patterns
if (isHighRiskTransaction(fromAccount, toAccount, amount)) {
notifyFraudTeam(fromAccount, toAccount, amount);
return { success: false, error: 'Transaction blocked' };
}
}
Warum es falsch ist: Die Betrugserkennungslogik wird nie ausgeführt, da die Funktion zurückkehrt, bevor sie erreicht wird. Die Protokollierung verdächtiger Aktivitäten nach der Betragsprüfung wird ebenfalls nie ausgeführt. Diese Funktion scheint Sicherheitsmaßnahmen zu enthalten, verarbeitet aber tatsächlich alle Überweisungen ohne Betrugsprüfungen.
✅ Konform:
function transferFunds(fromAccount, toAccount, amount) {
if (!fromAccount || !toAccount) {
return { success: false, error: 'Invalid accounts' };
}
if (amount <= 0) {
logSuspiciousActivity(fromAccount, amount);
return { success: false, error: 'Invalid amount' };
}
if (isHighRiskTransaction(fromAccount, toAccount, amount)) {
notifyFraudTeam(fromAccount, toAccount, amount);
return { success: false, error: 'Transaction blocked' };
}
const balance = getBalance(fromAccount);
if (balance >= amount) {
deductFunds(fromAccount, amount);
addFunds(toAccount, amount);
return { success: true };
}
return { success: false, error: 'Insufficient funds' };
}
Warum das wichtig ist: Alle Sicherheitsprüfungen werden vor der Verarbeitung der Übertragung ausgeführt. Die Betrugserkennung läuft bei jeder Transaktion. Verdächtige Aktivitäten werden protokolliert. Die Funktion implementiert die Sicherheitslogik, die sie vorgibt zu haben.
Fazit
Unerreichbarer Code weist auf Fehler in Ihrer Logik hin, bei denen die beabsichtigte Funktionalität nie ausgeführt wird. Finden Sie ihn mit statischen Analysetools in Ihrer CI-Pipeline und behandeln Sie ihn als kritisches Problem, nicht nur als Code-Bereinigung. Wenn Sie unerreichbaren Code entdecken, untersuchen Sie, warum er existiert und welche Logik eigentlich ausgeführt werden sollte, aber nicht ausgeführt wird.
.avif)
