Clean Code in JavaScript: Prinzipien und Beispiele
Clean Code ist nicht nur ein modischer Begriff, sondern ein grundlegender Ansatz in der Entwicklung, der Programme verständlich, leicht wartbar und erweiterbar macht. In der Welt von JavaScript und Node.js, wo Projekte schnell wachsen und häufige Änderungen erfordern, werden die Prinzipien von Clean Code besonders wichtig. In diesem Artikel analysieren wir die wichtigsten Praktiken zum Schreiben von sauberem Code in JavaScript mit konkreten Beispielen, die Ihnen helfen, die Qualität Ihrer Projekte zu verbessern.
1. Korrekte Benennung von Variablen und Funktionen
Der Name einer Variable oder Funktion sollte die Fragen "Was ist das?" und "Was macht es?" beantworten. Vermeiden Sie einbuchstabige Namen (außer bei Schleifenzählern) und Abkürzungen, die nicht offensichtlich sind.
Schlechtes Beispiel:
const d = new Date();const a = [];const fn = (x, y) => x + y;Gutes Beispiel:
const currentDate = new Date();const userList = [];const calculateSum = (firstNumber, secondNumber) => firstNumber + secondNumber;Namensregeln:
- Verwenden Sie
camelCasefür Variablen und Funktionen. - Für boolesche Werte verwenden Sie Präfixe:
is,has,should(z.B.isActive,hasPermission). - Benennen Sie Funktionen mit Verben:
getUser,sendEmail,validateInput. - Vermeiden Sie Abkürzungen:
usr→user,conf→configuration.
2. Kleine und auf eine Aufgabe spezialisierte Funktionen
Jede Funktion sollte genau eine Aufgabe erfüllen. Wenn eine Funktion mehr als eine Aktion ausführt, sollte sie in mehrere aufgeteilt werden. Dies verbessert die Lesbarkeit und Testbarkeit.
Schlechtes Beispiel (Funktion erledigt 3 Dinge auf einmal):
function processUserData(user) { // Validierung if (!user.email || !user.password) { throw new Error('Invalid data'); } // Formatierung const formattedUser = { email: user.email.toLowerCase(), password: hashPassword(user.password) }; // Speichern in der DB db.save(formattedUser); return formattedUser;}Gutes Beispiel (Aufteilung in separate Funktionen):
function validateUserInput(user) { if (!user.email || !user.password) { throw new Error('Email and password are required'); }}
function formatUserData(user) { return { email: user.email.toLowerCase(), password: hashPassword(user.password) };}
function saveUserToDatabase(user) { return db.save(user);}
function processUserData(user) { validateUserInput(user); const formattedUser = formatUserData(user); return saveUserToDatabase(formattedUser);}Dieser Ansatz macht den Code selbstdokumentierend und vereinfacht die Fehlersuche.
3. Fehlerbehandlung und Grenzfälle
Sauberer Code beinhaltet zwingend die Fehlerbehandlung und berücksichtigt Grenzfälle. Lassen Sie keinen Raum für unerwartete Ausfälle.
Schlechtes Beispiel (keine Fehlerbehandlung):
function getUserAge(user) { return user.age; // Wenn user oder user.age undefined ist — Fehler}Gutes Beispiel (mit Absicherung):
function getUserAge(user) { if (!user || typeof user.age !== 'number') { return null; // oder throw new Error('Invalid user data') } return user.age;}Prinzipien der Fehlerbehandlung:
- Verwenden Sie
try/catchfür asynchrone Operationen (besonders in Node.js). - Erstellen Sie eigene Fehlerklassen für verschiedene Situationen.
- Schlucken Sie Fehler nicht still — protokollieren Sie sie oder geben Sie sie weiter.
class ValidationError extends Error { constructor(message) {