Inhalt
- 1. Schreiben Sie beschreibende Funktions- und Variablennamen
- Beispiel für einen schlechten Namensstil
- Beispiel für eine gute Benennung von Variablen
- 2. Entfernen Sie Kommentare
- Beispiel für schlechtes Kommentieren
- Beispiel für gute Kommentare
- 3. Dokumentklassen und Funktionen
- 4. Schreiben Sie Hilfsfunktionen
- 5. Befolgen Sie die Code-Konventionen
- 6. Schreiben Sie Tests
- 7. Verwenden Sie Whitespace und Ordering zu Ihrem Vorteil
- Zusammenfassung
Ich liebe es, Ratschläge zu geben, wie man den besten Code für verschiedene Projekte schreibt.
Wenn Leute anfangen, Programmieren zu lernen, ist es oft der logische Teil davon, der das Faszinierende und Herausfordernde ist. Was oft übersehen wird, sind die differenzierteren Aspekte der Programmierung wie Variablennamen, Codestruktur, Dokumentation usw. Ziel dieses Beitrags ist es, einige einfache Tipps zu diesen Aspekten einzuführen, die einfach zu implementieren sind und die Sie hoffentlich zum Schreiben bringen werden besserer und besser lesbarer Code.
Codieren Sie immer so, als wäre der Typ, der Ihren Code verwaltet, ein gewalttätiger Psychopath, der weiß, wo Sie leben.
1. Schreiben Sie beschreibende Funktions- und Variablennamen
Viele Anfänger und professionelle Programmierer neigen manchmal dazu, ihre Funktionen und Variablen mit nicht beschreibenden Namen zu benennen. Das verfügbare Lehrmaterial ist hier teilweise schuld. Viele Tutorials und Bücher, in denen Funktionen und Variablen vorgestellt werden, benennen sie nicht richtig und rufen beispielsweise die Funktionen "f" und die Variablen "x" und "y" auf. Einer der brillanten Aspekte bei der Verwendung von Namen für Variablen und Funktionen besteht darin, dass der Programmierer einige Informationen darüber übermitteln kann, welche Rolle diese Variable oder Funktion im Programm spielt. Eine Funktion namens "f" gibt uns keine Informationen darüber, was sie tut. Gleiches gilt für "x" und "y". Ein weiteres häufiges Vorkommen (das auch häufig in Lehrmaterialien vorkommt) sind Variablen mit unnötigem "Flaum" im Namen, z. B. "my_number" oder "the_answer". Was macht die Nummer zum Programmierer oder zur Antwort? das Antworten?
Manchmal ist es auch sehr verlockend, Ihre Variablen im Kontext der Programmdomäne und nicht der Problemdomäne zu benennen, z. B. Ihre Funktionsparameter "input" und Ihren Rückgabewert "output" oder "return_value". Dies gibt keine nützlichen Informationen preis, die wir noch nicht kennen. Natürlich sind die Variablen, die direkt nach einer Funktionsdeklaration angezeigt werden, Eingaben. Das Gleiche gilt für alles, was nach einer return-Anweisung kommt. Es muss eine Ausgabe sein.
Beispiel für einen schlechten Namensstil
def list_func (Eingänge): temp = 0 für die Eingabe in Eingängen: temp + = Eingangsausgang = temp return output
Anstatt die oben genannten Fehler zu machen, kann man die Möglichkeit nutzen, Dinge zu benennen, um stattdessen die Bedeutung des Programms zu vermitteln, und Funktionen und Variablen in Bezug auf das Problem benennen, das sie zu lösen versuchen.
Manchmal ist es auch nützlich, Einheiten in Variablennamen zu erwähnen. Nach meiner persönlichen Erfahrung war dies besonders nützlich bei Variablen, die die Zeit darstellen, z. B. "ms_to_sleep", "Stunden_to_work" usw. Das Fehlen eines vollständigen Verständnisses der verwendeten Einheiten kann am Ende sehr kostspielig sein.
Beispiel für eine gute Benennung von Variablen
def sum (nums): cur_sum = 0 für num in nums: cur_sum + = num return cur_sum
2. Entfernen Sie Kommentare
Während wir uns mit der Lesbarkeit befassen, gibt es eine andere Technik, die zur Verbesserung des Codes verwendet werden kann, nämlich das Entfernen von Kommentaren. Der meiste Code ist überkommentiert, und Sie fragen sich vielleicht, warum das eine schlechte Sache ist. Das Problem ist, dass Kommentare beibehalten werden müssen, genau wie Code. Aber Code bricht oder zeigt uns unerwartetes Verhalten, wenn es falsch ist. Ein Kommentar hingegen wird das Programm nicht beschädigen, wenn es falsch oder falsch ist, was im Laufe der Zeit zu Irreführung führt.
Daher können Kommentare bei der Erklärung von Code gefährlich sein, da sie für keines seiner Verhaltensweisen verantwortlich sind. Glücklicherweise haben wir dieses wunderbare Tool, um zu erklären, was Code tut, nämlich die Programmiersprache, in der wir programmieren. Wenn wir lesbaren Code in unserer Programmiersprache schreiben, sollten wir keinen großen Bedarf an Kommentaren haben, da der Code selbstbeschreibend wäre. Wenn Sie den Drang verspüren, Kommentare zu den Funktionen Ihres Codes zu schreiben, sollten Sie sich überlegen, wie Sie dies stattdessen im Code erklären können, z. B. indem Sie Variablen anders benennen oder Code in eine separate Funktion extrahieren.
Eine allgemeine Faustregel ist das Kommentieren Warum Der Code ist so wie er ist, nicht Was es tut.
Beispiel für schlechtes Kommentieren
# Eine Funktion, die eine Liste von Zahlen nimmt und # die Summe ausgibt. def list_func (Eingänge): # Wir verwenden temp, um unsere Summe temp = 0 zu enthalten. # Schleife über jede Zahl in den Eingängen für die Eingabe in Eingaben: # Addiere unsere aktuelle Zahl zu unserer Summe temp + = Eingabe # Weise unsere endgültige Summe der Ausgabe zu output = temp # Gibt unsere Ausgabe zurück
Anstatt dass jeder Kommentar jede Codezeile spiegelt, ist es viel nützlicher, Kommentare dort zu platzieren, wo man davon ausgeht, dass die Leser des Codes verwirrt sind, und Kommentare abzugeben Warum Der Code ist so geschrieben, wie er ist.
Beispiel für gute Kommentare
def sum (nums): # Anstatt unsere eigene Funktion zu schreiben, könnten wir hier # Pythons eingebaute 'sum'-Funktion verwenden, aber wir möchten # diese Funktion als Beispiel für einen Online-Artikel verwenden. cur_sum = 0 für num in nums: cur_sum + = num return cur_sum
3. Dokumentklassen und Funktionen
Das Dokumentieren von Klassen und Funktionen wäre die Ausnahme von der obigen Regel. Kommentare sind im Allgemeinen nicht erforderlich, aber ein Ort, an dem sie verwendet werden, ist die Dokumentation von Konzepten auf höherer Ebene. Manchmal kann man nicht vollständig anpassen, was eine Funktion in ihrem Namen tut, ohne einen ganzen Satz einzugeben, wodurch der Funktionsname zu ausführlich wird. Für jemanden, der den Code liest, ist es sehr hilfreich, wenn Funktionen und Klassen eine Dokumentation haben, entweder in Form von Kommentaren oder als Dokumentzeichenfolge. Dies spart dem Leser Zeit, da er nicht die gesamte Funktion oder Klasse durchlesen muss, um herauszufinden, was sie tut und welche Parameter und Ausgaben sie hat.
Für dynamisch typisierte Sprachen ist dies besonders wichtig. In statisch typisierten Sprachen haben Funktionen eine Signatur, die angibt, welche Eingabetypen sie haben sollen und welcher Ausgabetyp sie haben. Dies ist in dynamisch typisierten Sprachen nicht der Fall, in denen die Typen der Parameter nicht explizit angegeben sind. Wenn die Funktion nicht dokumentiert ist, muss man normalerweise mindestens den Anfang durchlesen, um zu verstehen, welche 'Form' die Parameter haben sollten. Eine gute Funktionsdokumentation, die angibt, um welche Typen es sich bei den Parametern handelt, sowie die Ausgabe, möglicherweise sogar anhand eines Beispiels, erspart dem Leser das Herausfinden und kann stattdessen der Dokumentation vertrauen. Der Python-Styleguide von Google ist ein gutes Beispiel dafür.
4. Schreiben Sie Hilfsfunktionen
Funktionen sind wahrscheinlich am bekanntesten, um das Duplizieren und Wiederverwenden von Code zu vermeiden, sie können jedoch auch verwendet werden, um die Lesbarkeit des Codes zu verbessern. In der Regel ist eine Funktion mit einer Länge, die länger als die Höhe Ihres Bildschirms ist, unhandlich und schwer lesbar. Der Leser müsste Variablen vom Beginn der Funktion im Kopf behalten, während er den Rest liest, und es ist schwierig, sich ein gutes Bild vom Code zu machen. Hier kommen Hilfsfunktionen ins Spiel. Normalerweise hat eine große Funktion wie die oben erwähnte mehrere Codeabschnitte, in denen jeder Abschnitt etwas anderes als der Rest des Codes tut. Jeder dieser Abschnitte kann in eine Hilfsfunktion mit einem beschreibenden Namen umgewandelt werden. Dies würde die Lesbarkeit für die große Funktion verbessern. Anstatt lang und unhandlich zu sein, wäre es kurz und bissig mit stattdessen einfach zu lesenden Funktionsaufrufen.
5. Befolgen Sie die Code-Konventionen
Als Anfängerprogrammierer sollte man den Codierungskonventionen möglicherweise nicht allzu viel Aufmerksamkeit schenken. Bei Verbundprojekten sind sie jedoch unerlässlich. Codierungsstil und Konventionen helfen den Lesern von Code, indem sie angeben, was der Code tut. Zum Beispiel ist es durchaus üblich, dass Klassennamen den ersten Buchstaben in Großbuchstaben haben und dann camelCase für den Rest des Namens verwenden. Diese Konvention macht es einfach, Klassen zu erkennen.
Durch Konventionen sieht der Code auch während des gesamten Projekts gleich aus, sodass ein Leser nicht jedes Mal neu einstellen muss, wenn er einen anderen Teil betrachtet. Sie ermöglichen auch eine konsistente Editoreinrichtung. Beispielsweise ist es in Projekten durchaus üblich, eine maximale Zeilenlänge zu haben, sodass Codezeilen nicht mehr als n Zeichen enthalten dürfen. Auf diese Weise können Personen, die an dem Projekt arbeiten, ihre Editoren so einrichten, dass zwei Dateien gleichzeitig nebeneinander geöffnet werden können. Wenn dieses Limit in einer Datei plötzlich nicht mehr erzwungen wird, wird es sehr ärgerlich, da der Editor neu angepasst werden muss, um die gesamte Zeile zu sehen.
Es spielt keine Rolle, was die Konvention ist, solange es eine gibt und dass sie konsequent befolgt wird. Zum Beispiel wäre es sehr ärgerlich, wenn ein Programmierer snake_case für Variablen verwenden würde, während ein anderer camelCase für dasselbe Projekt verwenden würde. Eine einfache Möglichkeit, gute Konventionen zu finden, besteht darin, festzustellen, ob es eine Standardkonvention für die Sprache gibt, z. B. Pythons PEP8. Sie werden normalerweise auch mit Lintern für Redakteure geliefert, damit sie sich beschweren, wenn die Konvention nicht eingehalten wird. Google hat auch Konventionen für die von ihnen verwendeten Sprachen.
6. Schreiben Sie Tests
Ein Aspekt, der Anfängern nicht frühzeitig beigebracht wird, ist, dass Sie Ihren Code testen sollten. In größeren Projekten ist dies wichtiger, da Tests sowohl als Dokumentation für den Code dienen als auch das Vertrauen vermitteln, dass sich der Code so verhält, wie er sich verhält. Aber auch bei Einzelprojekten sind sie nützlich, da sie eine einfachere Umgestaltung ermöglichen und das Vertrauen stärken.
Ein Test für Code ist einfach ein Skript, das einen Aspekt Ihres Codes testet, normalerweise eine Funktion oder eine Klasse. Ein Test für eine Funktion würde erklären, was sie testet, Eingabevariablen für die Funktion einrichten und eine erwartete Ausgabe definiert haben. Der Test ruft dann die zu testende Funktion mit ihren definierten Eingabevariablen auf, erfasst die Antwort und überprüft, ob sie wie erwartet ist. Wenn wir beispielsweise eine Funktion testen, die zwei Zahlen addiert, können wir einen Test mit dem Namen 'TestAddIntegers' schreiben, der die Funktion mit den Zahlen 2 und 3 aufruft und überprüft, ob die Antwort 5 lautet.
Normalerweise reicht es jedoch nicht aus, nur einen Test pro Funktion durchzuführen. Was zu testen ist, sind alle Randfälle und selteneren Fälle. Kann die Funktion negative Zahlen hinzufügen? Kann es Schwimmer hinzufügen? Wirft es einen Fehler, wenn wir ihm verschiedene Typen geben, z. B. Zeichenfolgen?
Es wird viel darüber diskutiert, wie viel man seinen Code testen sollte und welche Teile und auf welche Weise. Dies verdient einen eigenen Blog-Beitrag. Es scheint jedoch einen guten Konsens zu geben, dass Computerprogramme irgendeine Form von Tests haben sollten.
7. Verwenden Sie Whitespace und Ordering zu Ihrem Vorteil
Ein Aspekt der Programmierung, der selten erwähnt wird, ist die Reihenfolge und Anordnung der Anweisungen. Ich stelle mir Programmieren gerne als Prosa vor. Beim Schreiben haben wir Strukturen und Techniken, die uns helfen, mit dem Leser zu kommunizieren. Wir haben einzelne Wörter, Sätze, Absätze, Interpunktion und andere Interpunktion, die uns helfen, dem Leser unsere Idee zu vermitteln. Im Code haben wir unterschiedliche Strukturen. Wir haben Funktionen, Objekte, Anweisungen, Zuweisungen, Ausdrücke und vor allem Leerzeichen. Diese Strukturen unterscheiden sich von dem, was wir beim Schreiben von Prosa verwenden, aber wir sollten sie mit demselben Zweck verwenden, um effektiv zu kommunizieren, was unser Code tut. So wie wir nicht mehr als eine Idee in einen Absatz einführen würden, sollten nicht zwei nicht zusammenhängende Anweisungen im selben Codeblock ausgeführt werden.
Eine gute Metrik, die Sie bei der Bestellung von Anweisungen berücksichtigen sollten, ist, dass die Lebensdauer von Variablen minimiert werden sollte. Die Lebensdauer einer Variablen ist die Anzahl der Zeilen zwischen dem ersten und dem letzten Mal, als sie verwendet wurde. Das Lesen von Code mit langer variabler Lebensdauer ist schwierig, da man Variablen lange im Kopf behalten muss, was die kognitive Belastung erhöht. Wenn stattdessen beispielsweise eine Variable in einem 10 Zeilen langen Block verwendet wird, ist es viel einfacher, den Überblick zu behalten, und man muss nach diesem Block nicht mehr daran denken. Dies gut zu machen ist manchmal schwierig, aber das Hinzufügen von Hilfsfunktionen und Leerzeichen an den richtigen Stellen hilft.
Zusammenfassung
Ich hoffe, diese Tipps zum Schreiben von besserem und besser lesbarem Code waren nützlich und Sie werden sie beim nächsten Programmieren berücksichtigen. Wenn Sie eigene Tipps zur Verbesserung der Lesbarkeit von Code haben, würde ich gerne in den Kommentaren davon erfahren.
Jedes andere Feedback ist ebenfalls sehr willkommen. Ich werde zu einem späteren Zeitpunkt möglicherweise detailliertere Beiträge zu jedem dieser Aspekte verfassen, sodass alle guten Tipps oder Vorschläge zu dem, worüber Sie mehr wissen möchten, sehr geschätzt werden.
Dieser Artikel ist genau und nach bestem Wissen des Autors. Der Inhalt dient nur zu Informations- oder Unterhaltungszwecken und ersetzt nicht die persönliche Beratung oder professionelle Beratung in geschäftlichen, finanziellen, rechtlichen oder technischen Angelegenheiten.