Clean Code in JavaScript: Prinzipien und Praxisbeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Clean Code in JavaScript: Prinzipien und Praxisbeispiele

\n\n

Sauberer Code (Clean Code) ist nicht nur ein modischer Begriff, sondern eine Entwicklungsphilosophie, die eine chaotische Sammlung von Anweisungen in ein strukturiertes, lesbares und wartbares System verwandelt. In der Welt von JavaScript und Node.js, wo Projekte schnell wachsen und komplexer werden, wird die Fähigkeit, sauberen Code zu schreiben, zu einer entscheidenden Fähigkeit. In diesem Artikel analysieren wir die wichtigsten Prinzipien von Clean Code anhand konkreter Beispiele mit Node.js.

\n\n

Warum ist sauberer Code für JavaScript-Entwickler wichtig?

\n\n

JavaScript ist eine Sprache mit dynamischer Typisierung und hoher Flexibilität, was gleichzeitig ihre Stärke und eine Quelle von Problemen ist. Ohne die Einhaltung der Disziplinen sauberen Codes verwandelt sich ein Projekt schnell in einen "Sumpf", in dem jede Änderung unerwartete Teile des Systems beschädigen kann. Clean Code hilft:

\n
    \n
  • Die Anzahl der Fehler und die Zeit für deren Suche zu reduzieren.
  • \n
  • Das Onboarding neuer Entwickler im Projekt zu beschleunigen.
  • \n
  • Refactoring und Skalierung der Codebasis zu erleichtern.
  • \n
  • Die Qualität von Code-Reviews zu verbessern.
  • \n
\n\n

Prinzip 1: Aussagekräftige Namen – die Grundlage des Verständnisses

\n\n

Das erste und wichtigste Prinzip von Clean Code ist die korrekte Benennung von Variablen, Funktionen, Klassen und Dateien. Der Name sollte die Fragen "Was ist das?" und "Wozu dient es?" beantworten. Vermeiden Sie einbuchstabige Variablen (außer bei Schleifenzählern) und abstrakte Bezeichnungen.

\n\n

Schlechtes Beispiel (Node.js):

\n
// Was macht diese Funktion? Unklar.\nfunction d(a, b) {\n  let r = [];\n  for (let i = 0; i < a.length; i++) {\n    if (b.includes(a[i])) {\n      r.push(a[i]);\n    }\n  }\n  return r;\n}\n\n// Verwendung\nconst arr1 = [1, 2, 3, 4, 5];\nconst arr2 = [3, 4, 5, 6, 7];\nconst result = d(arr1, arr2);\nconsole.log(result); // [3, 4, 5]
\n\n

Gutes Beispiel (Clean Code):

\n
// Funktions- und Parameternamen sprechen für sich\nfunction findCommonElements(array1, array2) {\n  const commonElements = [];\n  for (const element of array1) {\n    if (array2.includes(element)) {\n      commonElements.push(element);\n    }\n  }\n  return commonElements;\n}\n\n// Verwendung\nconst firstList = [1, 2, 3, 4, 5];\nconst secondList = [3, 4, 5, 6, 7];\nconst intersection = findCommonElements(firstList, secondList);\nconsole.log(intersection); // [3, 4, 5]
\n\n

Zusätzliche Empfehlungen zur Benennung:

\n
    \n
  • Boolesche Variablen: Verwenden Sie die Präfixe is, has, can (z. B. isActive, hasPermission).
  • \n
  • Funktionen: Verwenden Sie Verben (getUserData, validateEmail, sendNotification).
  • \n
  • Konstanten: Schreiben Sie in UPPER_SNAKE_CASE (MAX_RETRY_COUNT, DEFAULT_TIMEOUT_MS).
  • \n
\n\n

Prinzip 2: Kleine Funktionen mit einer einzigen Verantwortung

\n\n

Jede Funktion sollte nur eine Sache tun und diese gut machen. Wenn eine Funktion mehrere Aktionen ausführt (z. B. Daten validieren, eine Datenbankabfrage durchführen und eine E-Mail senden), sollte sie in mehrere kleine Funktionen aufgeteilt werden. Dies verbessert die Testbarkeit und Wiederverwendbarkeit des Codes.

\n\n

Schlechtes Beispiel (Node.js Express):

\n
app.post('/api/users', async (req, res) => {\n  const { name, email, password } = req.body;\n\n  // Validierung\n  if (!name || !email || !password) {\n    return res.status(400).json({ error: 'Missing fields' });\n  }\n  if (password.length < 8) {\n    return res.status(400).json({ error: 'Password too short' });\n  }\n\n  // Datenbankarbeit\n  const existingUser = await db.findUserByEmail(email);\n  if (existingUser) {\n    return res.status(409).json({ error: 'User exists' });\n  }\n\n  const hashedPassword = await bcrypt.hash(password, 10);\n  const newUser = await db.createUser({ name, email, password: hashedPassword });\n\n  //                

Blogs

Buchempfehlungen