Ein sauberer Code lässt sich leicht lesen, wiederverwenden und umgestalten. Das Schreiben von sauberem Code ist sehr wichtig, da Sie in unserer täglichen Arbeit nicht nur Code für sich selbst schreiben. In Wirklichkeit müssen Sie auch eine Gruppe von Kollegen berücksichtigen, die Ihren Code verstehen, bearbeiten und erstellen müssen. 1. Variablen Verwenden Sie aussagekräftige NamenVariablennamen sollten beschreibend und aussagekräftig sein. JavaScript-Variablen sollten in CamelCase benannt werden. // Nicht ❌ const foo = "[email protected]"; const bar = "John"; konstantes Alter = 23; Konstanten qux = true; // Tun ✅ const email = "[email protected]"; const Vorname = "John"; konstantes Alter = 23; const istAktiv = true Boolesche Variablen werden oft benötigt, um bestimmte Fragen zu beantworten, wie zum Beispiel:
Vermeiden Sie das Hinzufügen unnötigen KontextsFügen Sie Variablennamen keinen redundanten Kontext hinzu, wenn das Objekt oder die Klasse den Benennungskontext bereits enthält. // Nicht ❌ const Benutzer = { Benutzer-ID: "296e2589-7b33-400a-b762-007b730c8e6d", Benutzer-E-Mail: "[email protected]", BenutzerVorname: "John", BenutzerNachname: "Doe", BenutzerAlter: 23, }; Benutzer.Benutzer-ID; // Tun ✅ const Benutzer = { ID: "296e2589-7b33-400a-b762-007b730c8e6d", E-Mail: "[email protected]", Vorname: "John", Nachname: "Doe", Alter: 23, }; Benutzer-ID; Vermeiden Sie hartcodierte WerteAchten Sie darauf, aussagekräftige und durchsuchbare Konstanten zu deklarieren, anstatt einen konstanten Wert direkt einzufügen. Globale Konstanten können im Stil SCREAMING_SNAKE_CASE benannt werden. // Nicht ❌ setTimeout(clearSessionData, 900000); // Tun ✅ const SESSION_DURATION_MS = 15 * 60 * 1000; setTimeout(clearSessionData, SESSION_DURATION_MS); 2. Funktionen Verwenden Sie aussagekräftige NamenFunktionsnamen müssen beschreiben, was die Funktion tatsächlich tut, auch wenn sie lang sind. In Funktionsnamen werden normalerweise Verben verwendet. Eine Funktion, die einen Booleschen Wert zurückgibt, kann jedoch eine Ausnahme darstellen. Sie kann die Form einer Ja- oder Nein-Frage haben und der Funktionsname sollte außerdem Camel Case verwenden. // Nicht ❌ Funktion umschalten() { // ... } Funktion vereinbart (Benutzer) { // ... } // Tun ✅ Funktion toggleThemeSwitcher() { // ... } Funktion didAgreeToAllTerms(Benutzer) { // ... } Verwenden von StandardparameternStandardparameter sind sauberer als && || oder die Verwendung zusätzlicher Bedingungen innerhalb des Funktionskörpers. // Nicht ❌ Funktion printAllFilesInDirectory(dir) { const directory = dir || "./"; // ... } // Tun ✅ Funktion printAllFilesInDirectory(dir = "./") { // ... } Begrenzen Sie die Anzahl der ParameterObwohl diese Regel umstritten sein kann, ist es am besten, Funktionen mit 3 oder weniger Parametern zu haben. Wenn viele Parameter vorhanden sind, kann eine der folgenden beiden Situationen vorliegen:
// Nicht ❌ Funktion sendPushNotification(Titel, Nachricht, Bild, isSilent, delayMs) { // ... } sendPushNotification("Neue Nachricht", "...", "http://...", false, 1000); // Tun ✅ Funktion sendPushNotification({ Titel, Nachricht, Bild, isSilent, delayMs }) { // ... } const Benachrichtigungskonfiguration = { Titel: "Neue Nachricht", Nachricht: "...", Bild: "http://...", isSilent: false, VerzögerungMs: 1000, }; sendPushNotification(Benachrichtigungskonfiguration); Vermeiden Sie, zu viele Aufgaben in einer Funktion auszuführenEine Funktion sollte immer nur eine Sache auf einmal tun. Dadurch werden Größe und Komplexität der Funktion reduziert und das Testen, Debuggen und Refactoring vereinfacht. / Nicht ❌ Funktion pingUsers(Benutzer) { Benutzer.fürJeden((Benutzer) => { const userRecord = Datenbank.lookup(Benutzer); wenn (!userRecord.isActive()) { ping(Benutzer); } }); } // Tun ✅ Funktion pingInactiveUsers(Benutzer) { Benutzer.filter(!isUserActive).forEach(ping); } Funktion isUserActive(Benutzer) { const userRecord = Datenbank.lookup(Benutzer); gibt userRecord.isActive() zurück; } Vermeiden Sie die Verwendung von Booleschen Flags als ParameterFunktionen mit Booleschen Flags als Parameter bedeuten, dass die Funktion vereinfacht werden kann. // Nicht ❌ Funktion Dateierstelle(Name, istÖffentlich) { if (istÖffentlich) { fs.create(`./public/${name}`); } anders { fs.create(Name); } } // Tun ✅ Funktion Datei erstellen(Name) { fs.erstellen(Name); } Funktion erstelleÖffentlicheDatei(Name) { Datei erstellen(`./public/${name}`); } Vermeiden Sie das Schreiben von doppeltem CodeWenn Sie doppelten Code schreiben, müssen Sie bei jeder Änderung der Logik mehrere Stellen ändern. // Nicht ❌ Funktion renderCarsList(Autos) { Autos.fürJedes((Auto) => { const Preis = Auto.getPrice(); const make = car.getMake(); const Marke = Auto.getBrand(); const nbOfDoors = car.getNbOfDoors(); render({ Preis, Marke, Hersteller, Anzahl Türen }); }); } Funktion renderMotorcyclesList(Motorräder) { Motorräder.fürJedes((Motorrad) => { const Preis = Motorrad.getPrice(); const make = Motorrad.getMake(); const Marke = Motorrad.getBrand(); const seatHeight = Motorrad.getSeatHeight(); render({ Preis, Marke, Hersteller, Anzahl Türen }); }); } // Tun ✅ Funktion renderVehiclesList(Fahrzeuge) { Fahrzeuge.fürJedes((Fahrzeug) => { const Preis = Fahrzeug.getPrice(); const make = Fahrzeug.getMake(); const Marke = Fahrzeug.getBrand(); const data = { Preis, Marke, Marke }; Schalter (Fahrzeugtyp) { Fall "Auto": Daten.AnzahlTüren = Fahrzeug.getNbTüren(); brechen; Fall „Motorrad“: Daten.Sitzhöhe = Fahrzeug.getSeatHeight(); brechen; } rendern(Daten); }); } Vermeiden Sie NebenwirkungenIn JavaScript sollten Sie das funktionale Paradigma dem imperativen Paradigma vorziehen. Mit anderen Worten, wir sollten die Funktionen in den meisten Fällen rein halten. Nebenwirkungen können den gemeinsam genutzten Status und die Ressourcen ändern und seltsame Probleme verursachen. Alle Nebeneffekte sollten zentral verwaltet werden. Wenn Sie beispielsweise globale Variablen ändern oder Dateien modifizieren müssen, können Sie ein spezielles Dienstprogramm zu diesem Zweck schreiben. // Nicht ❌ let Datum = "21.08.2021"; Funktion splitIntoDayMonthYear() { Datum = Datum.split("-"); } splitInTagMonatJahr(); // Eine andere Funktion könnte ein Datum als Zeichenfolge erwarten konsole.log(Datum); // ['21', '8', '2021']; // Tun ✅ Funktion splitIntoDayMonthYear(Datum) { Rückgabedatum.Split("-"); } konstantes Datum = "21.08.2021"; const newDate = splitIntoDayMonthYear(Datum); // Originalwert bleibt erhalten console.log(Datum); // '21.08.2021'; console.log(neuesDatum); // ['21', '8', '2021']; Wenn Sie einer Funktion einen veränderbaren Wert übergeben, sollten Sie den Wert außerdem immer klonen und zurückgeben, anstatt ihn zu verändern. // Nicht ❌ Funktion enrollStudentInCourse(Kurs, Student) { course.push({ Student, Einschreibungsdatum: Datum.jetzt() }); } // Tun ✅ Funktion enrollStudentInCourse(Kurs, Student) { return [...Kurs, {Student,Einschreibungsdatum: Datum.jetzt()}]; } 3. Bedingte Anweisungen Verwenden nicht-negativer Bedingungen// Nicht ❌ Funktion isUserNotVerified(Benutzer) { // ... } if (!isUserNotVerified(Benutzer)) { // ... } // Tun ✅ Funktion isUserVerified(Benutzer) { // ... } if (isUserVerified(Benutzer)) { // ... } Verwenden Sie nach Möglichkeit Abkürzungen// Nicht ❌ wenn (istAktiv === wahr) { // ... } if (Vorname !== "" && Vorname !== null && Vorname !== undefiniert) { // ... } const isUserEligible = user.isVerified() und user.didSubscribe() ? true : false; // Tun ✅ wenn (istAktiv) { // ... } if (!!Vorname) { // ... } const isUserEligible = user.isVerified() und user.didSubscribe(); Vermeiden Sie zu viele VerzweigungenDurch eine frühzeitige Rückgabe wird Ihr Code linearer, lesbarer und weniger komplex. // Nicht ❌ Funktion addUserService(db, Benutzer) { wenn (!db) { wenn (!db.isConnected()) { wenn (!Benutzer) { return db.insert("Benutzer", Benutzer); } anders { throw new Error("Kein Benutzer"); } } anders { throw new Error("Keine Datenbankverbindung"); } } anders { throw new Error("Keine Datenbank"); } } // Tun ✅ Funktion addUserService(db, Benutzer) { if (!db) throw new Error("Keine Datenbank"); if (!db.isConnected()) throw new Error("Keine Datenbankverbindung"); if (!user) throw new Error("Kein Benutzer"); return db.insert("Benutzer", Benutzer); } Bevorzugen Sie Map-Anweisungen gegenüber Switch-AnweisungenEs kann die Komplexität reduzieren und die Leistung verbessern. // Nicht ❌ const getColorByStatus = (status) => { Schalter (Status) { Fall „Erfolg“: "grün" zurückgeben; Fall „Misserfolg“: gib "rot" zurück; Fall „Warnung“: gebe "gelb" zurück; Fall „Laden“: Standard: gebe "blau" zurück; } }; // Tun ✅ const statusColors = { Erfolg: "grün", Fehler: "rot", Warnung: "gelb", Laden: "blau", }; const getColorByStatus = (status) => statusColors[status] || "blau"; Verwenden optionaler Verkettung const Benutzer = { E-Mail: "[email protected]", Abrechnung: iban: "...", schnell: "...", Adresse: Straße: "Ein Straßenname", Staat: "CA", }, }, }; // Nicht ❌ const email = (Benutzer && Benutzer.E-Mail) || "N/A"; const Straße = (Benutzer && Benutzer.Abrechnung && Benutzer.Rechnungsadresse && Benutzer.Rechnungsadresse.Straße) || "N / A"; konstanter Zustand = (Benutzer && Benutzer.Abrechnung && Benutzer.Rechnungsadresse && Benutzer.Rechnungsadresse.Bundesstaat) || "N / A"; // Tun ✅ const email = Benutzer?.email ?? "N/A"; const street = Benutzer?.Rechnung?.Adresse?.Straße ?? "N/A"; const street = Benutzer?.Abrechnung?.Adresse?.Bundesstaat ?? "N/A"; 4. Parallelität Rückrufe vermeidenRückrufe sind verwirrend und können dazu führen, dass Ihr Code zu tief verschachtelt wird. Verwenden Sie Promises anstelle von Rückrufen. // Nicht ❌ getUser(Funktion (err, Benutzer) { getProfile(Benutzer, Funktion (err, Profil) { getAccount(Profil, Funktion (err, Konto) { getReports(Konto, Funktion (Fehler, Berichte) { sendStatistics(Berichte, Funktion (Fehler) { Konsole.Fehler(Fehler); }); }); }); }); }); // Tun ✅ getUser() .then(Profil abrufen) .dann(Konto abrufen) .then(getReports) .then(sendStatistics) .catch((err) => console.error(err)); // oder mit Async/Await ✅✅ asynchrone Funktion sendUserStatistics() { versuchen { const Benutzer = warte auf getUser(); const profile = warte auf getProfile(Benutzer); const Konto = warte auf getAccount(Profil); const Berichte = warte auf getReports(Konto); gibt sendStatistics(Berichte) zurück; } fangen (e) { Konsole.Fehler(Fehler); } } 5. FehlerbehandlungUmgang mit ausgelösten Fehlern und abgelehnten Versprechen / Nicht ❌ versuchen { // Möglicher fehlerhafter Code } fangen (e) { konsole.log(e); } // Tun ✅ versuchen { // Möglicher fehlerhafter Code } fangen (e) { // Befolgen Sie die am häufigsten (oder alle) zutreffenden Angaben: // 1- Geeigneter als console.log konsole.fehler(e); // 2- Benutzer ggf. benachrichtigen Fehlerbenutzeralarm(e); // 3- Dem Server melden Fehler an Server melden(e); // 4- Verwenden Sie einen benutzerdefinierten Fehlerhandler wirf einen neuen CustomError(e); } 6. Anmerkungen Nur Geschäftslogik kommentierenLesbarer Code erspart Ihnen übermäßiges Kommentieren. Daher sollten Sie nur komplexe Logik kommentieren. // Nicht ❌ Funktion generateHash(str) { // Hash-Variable lass hash = 0; //Länge des Strings ermitteln lass Länge = str.Länge; // Wenn der String leer ist, returnieren Sie wenn (!Länge) { Hash zurückgeben; } // Durchlaufe alle Zeichen im String für (sei i = 0; i < Länge; i++) { // Zeichencode abrufen. const char = str.charCodeAt(i); // Erstelle den Hash Hash = (Hash << 5) – Hash + Zeichen; // In 32-Bit-Integer konvertieren Hash &= Hash; } } // Tun ✅ Funktion generateHash(str) { lass hash = 0; lass Länge = str.Länge; wenn (!Länge) { Hash zurückgeben; } für (sei i = 0; i < Länge; i++) { const char = str.charCodeAt(i); Hash = (Hash << 5) – Hash + Zeichen; hash = hash & hash; // In 32-Bit-Ganzzahl konvertieren } Hash zurückgeben; } Verwenden Sie die VersionskontrolleEs ist nicht notwendig, Kommentare zu früheren Versionen im Code zu speichern. Wenn Sie dies überprüfen möchten, können Sie einfach mit „git log“ suchen. . // Nicht ❌ /** * 21.07.2021: Sonderfall behoben * 15.07.2021: Verbesserte Leistung * 10.07.2021: Mehrere Benutzertypen verarbeitet */ Funktion generateCanonicalLink(Benutzer) { // const session = getUserSession(Benutzer) const session = Benutzer.getSession(); // ... } // Tun ✅ Funktion generateCanonicalLink(Benutzer) { const session = Benutzer.getSession(); // ... } Ok, schreiben Sie Ihren schönen Code! 🌈 ZusammenfassenDies ist das Ende dieses Artikels zum Schreiben von sauberem JavaScript-Code. Weitere Informationen zum Schreiben von sauberem JavaScript-Code finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
>>: Grundsätze und Nutzungsdetails für MySQL 8.0-Benutzer- und Rollenverwaltung
Vorwort Beim Installieren der ausführbaren Datei ...
Inhaltsverzeichnis Übergangs-Hook-Funktion Benutz...
1. Einleitung Zuvor haben wir die schnelle Entwic...
Da myeclipse2017 und idea2017 auf dem Computer in...
1. Erstellen Sie eine Seite mit app.json Gemäß un...
Erstellen eines Ordners Verzeichnisstruktur: daba...
Wenn wir die LNPM-Serverumgebung installieren und...
Beim Erlernen von CSS3 geht es mehr darum, sich m...
1. Verwandte Konzepte 1.1 Jenkins-Konzepte: Jenki...
1. Installieren und starten Sie nginx # Installie...
Flex-Layout wird auch elastisches Layout genannt....
1. Link zum Attribut (1) Platzieren Sie den Routi...
Einführung Wie im vorherigen Artikel erwähnt, gib...
Allgemeine Lade-/Schreibmethoden Optionen manuell...
Dieses Mal verwenden wir HTML+CSS-Layout, um eine...