Einige der folgenden Aussagen sind recht persönlich, wenn auch mit einer gewissen Begründung, und sollen auf diese Weise erfolgen.
Kommentararten
Für die kurze Version ... verwende ich Kommentare für:
- nachfolgende Kommentare, die Felder in Datenstrukturen erläutern (abgesehen davon verwende ich eigentlich keine einzeiligen Kommentare)
- außergewöhnliche oder zweckorientierte mehrzeilige Kommentare über Blöcken
- Öffentliche Benutzer- und / oder Entwicklerdokumentation, die aus der Quelle generiert wurde
Lesen Sie weiter unten die Details und (möglicherweise unklaren) Gründe.
Hinterlegte Kommentare
Je nach Sprache können einzeilige oder mehrzeilige Kommentare verwendet werden. Warum kommt es darauf an? Es ist nur ein Standardisierungsproblem. Wenn ich C-Code schreibe, bevorzuge ich standardmäßig den altmodischen ANSI C89-Code /* comments */
.
Daher habe ich dies die meiste Zeit in C und manchmal (abhängig vom Stil der Codebasis) für Sprachen mit einer C-ähnlichen Syntax:
typedef struct STRUCT_NAME {
int fieldA; /* aligned trailing comment */
int fieldBWithLongerName; /* aligned trailing comment */
} TYPE_NAME;
Emacs ist nett und macht das für mich mit M-;
.
Wenn die Sprache einzeilige Kommentare unterstützt und nicht C-basiert ist, bin ich eher geneigt, einzeilige Kommentare zu verwenden. Ansonsten fürchte ich, ich habe es mir jetzt angewöhnt. Was nicht unbedingt schlecht ist, da es mich zwingt, prägnant zu sein.
Mehrzeilige Kommentare
Ich bin nicht einverstanden mit Ihrem Grundsatz, einzeilige Kommentare zu verwenden, da dies optisch ansprechender ist. Ich benutze das:
/*
* this is a multi-line comment, which needs to be used
* for explanations, and preferably be OUTSIDE the a
* function's or class' and provide information to developers
* that would not belong to a generated API documentation.
*/
Oder dies (aber das mache ich nicht mehr oft, außer bei einer persönlichen Codebasis oder meistens wegen Urheberrechtsvermerken - dies ist historisch für mich und kommt aus meiner Ausbildung. Leider machen die meisten IDEs es falsch, wenn sie das automatische Format verwenden) :
/*
** this is another multi-line comment, which needs to be used
** for explanations, and preferably be OUTSIDE the a
** function's or class' and provide information to developers
** that would not belong to a generated API documentation.
*/
Wenn es wirklich sein muss, würde ich Inline-Kommentare mit dem, was ich zuvor für abschließende Kommentare erwähnt habe, abgeben, wenn es sinnvoll ist, es in einer abschließenden Position zu verwenden. Auf einem ganz besondere Rückkehr Fall, zum Beispiel, oder Dokument eines switch
‚s case
Aussagen (selten, ich habe keine Verwendung wechselt oft), oder wenn wir dokumentieren Zweige in einem if ... else
Kontrollfluss. Wenn dies nicht der Fall ist, ist ein Kommentarblock außerhalb des Bereichs, in dem die Schritte der Funktion / Methode / des Blocks beschrieben werden, für mich sinnvoller.
Ich verwende diese sehr außergewöhnlich, außer wenn sie in einer Sprache ohne Unterstützung für Dokumentationskommentare codiert sind (siehe unten). In diesem Fall treten sie häufiger auf. Aber im Allgemeinen dient es nur dazu, Dinge zu dokumentieren, die für andere Entwickler bestimmt sind und interne Kommentare sind, die wirklich herausstechen müssen. So dokumentieren Sie beispielsweise einen obligatorischen leeren Block wie einen "erzwungenen" catch
Block:
try {
/* you'd have real code here, not this comment */
} catch (AwaitedException e) {
/*
* Nothing to do here. We default to a previously set value.
*/
}
Was für mich schon hässlich ist würde ich aber unter Umständen tolerieren.
Dokumentationskommentare
Javadoc & al.
Normalerweise verwende ich sie für Methoden und Klassen, um Versionen zu dokumentieren, die ein Feature einführen (oder ändern), insbesondere wenn es sich um eine öffentliche API handelt, und um einige Beispiele bereitzustellen (mit eindeutigen Eingabe- und Ausgabefällen sowie Sonderfällen). Obwohl in einigen Fällen ein Einzelfall besser ist, um diese zu dokumentieren, sind Einzeltests nicht unbedingt für den Menschen lesbar (unabhängig davon, welches DSL-Ding Sie verwenden).
Sie nerven mich ein bisschen, Felder / Eigenschaften zu dokumentieren, da ich es vorziehe, Kommentare nachzuschlagen, und nicht alle Dokumentationsgenerierungs-Frameworks unterstützen das Nachziehen von Dokumentationskommentaren. Doxygen zum Beispiel, JavaDoc nicht, was bedeutet, dass Sie für alle Ihre Felder einen Top-Kommentar benötigen. Ich kann das jedoch überleben, da Java-Zeilen die meiste Zeit ohnehin relativ lang sind. Daher würde mich ein nachfolgender Kommentar gleichermaßen einschüchtern, wenn ich die Zeile über meine Toleranzschwelle hinaus verlängere. Wenn Javadoc jemals darüber nachdenken würde, das zu verbessern, wäre ich viel glücklicher.
Auskommentierter Code
Ich verwende einzeilig nur aus einem Grund in C-ähnlichen Sprachen (außer wenn für striktes C kompiliert wird, wo ich sie wirklich nicht verwende): um Sachen während des Codierens auszukommentieren. Die meisten IDEs müssen für einzeilige Kommentare umschalten (ausgerichtet an Einzug oder an Spalte 0), und das passt zu diesem Anwendungsfall für mich. Die Verwendung des Umschalters für mehrzeilige Kommentare (oder die Auswahl in der Mitte von Zeilen für einige IDEs) erschwert das einfache Umschalten zwischen Kommentaren und Kommentaren.
Aber da ich im SCM gegen auskommentierten Code bin, ist das normalerweise nur von kurzer Dauer, da ich auskommentierte Chunks vor dem Festschreiben löschen werde. (Lesen Sie meine Antwort auf diese Frage zu "Inline-Kommentaren und SCMs bearbeitet von" )
Kommentarstile
Normalerweise neige ich dazu zu schreiben:
- Vervollständigen Sie Sätze mit korrekter Grammatik (einschließlich Zeichensetzung) für Dokumentationskommentare, da diese später in einem API-Dokument oder sogar als Teil eines generierten Handbuchs gelesen werden sollen.
- Gut formatierte, aber lockerere Interpunktion / Großbuchstaben für mehrzeilige Kommentarblöcke
- nachgestellte Blöcke ohne Interpunktion (wegen des Leerzeichens und normalerweise, weil der Kommentar ein kurzer ist, der eher wie eine in Klammern gesetzte Aussage liest)
Ein Hinweis zu Literate Programming
Vielleicht möchten Sie sich für Literate Programming interessieren , wie in diesem Artikel von Donald Knuth vorgestellt .
Das Paradigma der gebildeten Programmierung [...] stellt eine Abkehr vom Schreiben von Programmen in der vom Computer auferlegten Weise und Reihenfolge dar und ermöglicht Programmierern stattdessen, Programme in der Reihenfolge zu entwickeln, die von der Logik und dem Fluss ihrer Gedanken verlangt wird. 2 Literarische Programme sind eine ununterbrochene Darstellung der Logik in einer gewöhnlichen menschlichen Sprache, ähnlich wie der Text eines Aufsatzes [...].
Literarische Programmierwerkzeuge werden verwendet, um zwei Darstellungen aus einer literarischen Quelldatei zu erhalten: eine, die zur weiteren Kompilierung oder Ausführung durch einen Computer geeignet ist, den "Wirr" -Code und eine, die als formatierte Dokumentation angezeigt wird, die aus der "gewebt" wird gebildete Quelle.
Als Randnotiz und Beispiel: Das JavaScript-Framework von underscore.js ist trotz der Nichteinhaltung meines Kommentierungsstils ein ziemlich gutes Beispiel für eine gut dokumentierte Codebasis und eine wohlgeformte kommentierte Quelle - obwohl es möglicherweise nicht das beste ist, das es verwendet eine API-Referenz).
Dies sind persönliche Konventionen. Ja, ich könnte komisch sein (und Sie könnten es auch sein). Es ist OK, solange Sie folgen und entsprechen Code Konventionen Ihres Teams , wenn sie mit Kollegen arbeiten, oder nicht radikal ihre Vorlieben angreifen und cohabitate schön. Es ist Teil Ihres Stils, und Sie sollten die Grenze zwischen der Entwicklung eines Kodierungsstils, der Sie als Kodierer definiert (oder als Anhänger einer Denk- oder Organisationsschule, mit der Sie eine Verbindung haben) und der Beachtung der Konvention einer Gruppe für Konsistenz finden .
:3,7 Align //
ausrichten : Verwenden Sie Align.vim, und richten Sie die Kommentare in den Zeilen 3-7 aus.