Werden Kommentare als Dokumentationsform betrachtet?

11

Wenn ich kleine Skripte für mich selbst schreibe, staple ich meinen Code hoch mit Kommentaren (manchmal kommentiere ich mehr als ich codiere). Viele Leute, mit denen ich spreche, sagen, dass ich diese Skripte dokumentieren sollte, obwohl sie persönlich sind, damit ich bereit wäre, wenn ich sie jemals verkaufen würde. Aber sind Kommentare keine Dokumentationsform?

Wäre das nicht:

$foo = "bar"; # this is a comment
print $foo; # this prints "bar"

als Dokumentation angesehen werden, insbesondere wenn ein Entwickler meinen Code verwendet? Oder wird die Dokumentation als außerhalb des Codes selbst befindlich angesehen?

Dynamisch
quelle
11
Wenn Sie ein Dokumentgenerierungssystem wie JavaDocs oder Doxygen verwenden, sind Kommentare buchstäblich Dokumentation.
Gort den Roboter
5
YANGNI ( xprogramming.com/Practices/PracNotNeed.html ). Dokumentieren Sie Ihren Code zu Ihrer Zufriedenheit. Lassen Sie sich vom Kunden (falls es jemals einen gibt) bezahlen, um die Dokumentation zu seiner Zufriedenheit zu schreiben. Mach dir keine Sorgen darüber, mit wie vielen Leuten du sprichst (es sei denn, sie bezahlen dich).
Emory
1
Von Ihren 2 Kommentaren ist der 2. nutzlos. Warum nicht $ foo durch bar ersetzen? Wenn dies nicht der Fall ist, ist der Kommentar falsch. Der erste Kommentar ist falsch. Es ist eine Aufgabe.
Strg-Alt-Delor
2
Wenn Sie einen Kommentar hinzufügen möchten, ändern Sie Ihren Code so, dass er keinen Kommentar benötigt. Alles ist Dokumentation, Code ist Dokumentation, Kommentare haben normalerweise keine [zusätzlichen] Informationen oder sind falsch. Dokumentieren Sie die Absicht, was (Code-Verträge können dabei helfen) und warum. Halten Sie die Dokumentation in der Nähe des Codes und verwenden Sie Kommentare. Dokumentation über Dokumente: Kommentare über Dokumente, Code über Kommentare löschen.
Strg-Alt-Delor
2
Ist YANGNI "du wirst es nicht brauchen"
Chris S

Antworten:

27

Kommentare sind definitiv Dokumentation. Bei den meisten Projekten sind Kommentare (leider) die primäre (wenn nicht nur) Form der Projektdokumentation. Aus diesem Grund ist es sehr wichtig, es richtig zu machen. Sie müssen sicherstellen, dass diese Dokumentation trotz Codeänderungen korrekt bleibt. Dies ist ein häufiges Problem bei Kommentaren. Entwickler "schalten" sie häufig aus, wenn sie mit bekanntem Code arbeiten, und vergessen daher, Kommentare zu aktualisieren, um den Code wiederzugeben. Dies kann zu veralteten und irreführenden Kommentaren führen.

Viele Leute schlagen vor, den Code selbst zu dokumentieren. Dies bedeutet, dass Sie anstelle von Kommentaren Ihren Code neu strukturieren, um die Notwendigkeit für sie zu beseitigen. Dies kann die meisten "Was" - und "Wie" -Kommentare beseitigen, hilft aber nicht wirklich bei den "Warum" -Kommentaren. Während dies effektiv funktioniert, um die meisten Kommentare zu entfernen, gibt es immer noch viele Fälle, in denen das Schreiben eines Kommentars die einfachste und effizienteste Möglichkeit ist, einen Code zu dokumentieren.

Oleksi
quelle
3
"Bei den meisten Projekten sind Kommentare die primäre (wenn nicht nur) Form der Projektdokumentation." - verlockend, dafür zu stimmen, aber leider muss es als wahre Aussage zugelassen werden. Ich hoffe jedoch, dass Sie nicht behaupten wollen, dass dies so sein sollte.
Edward Strange
2
Ich bin damit wirklich nicht einverstanden, da die einzige zuverlässige Dokumentation, die Sie haben, der Quellcode selbst ist. Sowohl Kommentare als auch "Dokumentation" müssen mit dem Code gepflegt werden, was selten vorkommt. Die einzige zuverlässige Dokumentationsquelle ist also Ihr Code!
Martiert
3
@martiert Früher ging es mir genauso, aber ich fand, dass dies in der Praxis nicht so gut funktioniert. Alle diese "Warum" -Kommentare sind als Kommentare viel klarer als der Versuch, "Warum" -Wissen aus dem Code zu extrahieren. Natürlich kann (und sollte) Selbstdokumentationscode verwendet werden, um die meisten Kommentare zu entfernen , aber manchmal ist ein Kommentar die einfachste, klarste und zeiteffizienteste Methode, um etwas zu dokumentieren.
Oleksi
3
@martiert Das Problem mit selbstdokumentierendem Code ist, dass er keine Verweise auf Dokumentation an anderer Stelle zulässt. Einige der besten Kommentare im Code, die ich je gesehen habe, waren Verweise auf wissenschaftliche Arbeiten, in denen die Details des verwendeten Algorithmus oder die Auswahl magischer Konstanten erläutert wurden. Keine Selbstdokumentation wird dazu beitragen, die Tatsache zu vermeiden, dass einige kritische Dokumentationen einfach nicht offensichtlich sind. Das „Warum“ fällt oft in diese Kategorie und manchmal auch das „Wie“.
Donal Fellows
3
Beachten Sie auch, dass Kommentare in vielen Sprachen verwendet werden, um die eigentliche Dokumentation zu erstellen. Daher sind sie häufig ein und dasselbe. Sehen Sie sich die MSDN als Beispiel an.
Steven Evers
12

Sie sind eine Form der Dokumentation, aber denken Sie daran, dass die Dokumentation im Auge des Betrachters liegt.

  • Für einige reicht selbstdokumentierender Code aus. Dies setzt jedoch ein Maß an technischen Details als Kunde voraus. Wir sollten vorsichtig denken, dass dies ausreicht, weil unser Ego uns vielleicht sagt "Es ist offensichtlich, was dieser Code tut", aber die Zeit kann das Gegenteil beweisen. Es wird auch davon ausgegangen, dass Sie die Fähigkeiten des Lesers im Voraus kennen.

  • Für diejenigen, die sich Quellcode ansehen, aber weniger technisches Fachwissen haben, könnten Kommentare in Ordnung sein. Dies setzt jedoch voraus, dass sich jemand den Quellcode ansieht.

  • Wenn Sie technisch versiert sind, aber nicht die Zeit haben, den gesamten Quellcode zu lesen, ist möglicherweise ein technisches Handbuch erforderlich.

  • Wenn dem Benutzer technische Fähigkeiten fehlen, er aber nur wissen muss, was passiert, ist eine Benutzerdokumentation erforderlich.

Die eigentliche Frage ist also, wer Ihr Kunde ist. Wenn ja, reichen selbstdokumentierender Code oder Kommentare aus. Wenn es sich um eine andere Person handelt, möchten Sie möglicherweise die Dokumentation erweitern.

MathAttack
quelle
17
Selbstdokumentierender Code ist eine Lüge.
Yannis
1
@YannisRizos Eher ein unerreichbares Ziel als eine völlige Lüge.
Ptharien Flamme
2
@YannisRizos: Sie haben vielleicht Recht, aber Code, der viele Kommentare benötigt, ist fast immer sehr schlechter Code und könnte fast immer so geschrieben werden, dass er weniger Kommentare benötigt.
Doc Brown
9
@ DocBrown Abhängig. Ich habe Leute gesehen, die für Schleifen dokumentiert haben, und ich habe Leute gesehen, die behaupteten, 100 Geschäftslogik sei selbstdokumentierend. Tatsache ist, dass übermäßige Kommentare nicht schaden können (außer wenn sie veraltet / falsch sind), und wenn ich zwischen übermäßigem Kommentieren und selbstdokumentierendem Code wählen muss, werde ich immer den ersten wählen. Natürlich würde ich ausgewogene und auf den Punkt gebrachte Kommentare, wie Oleksi beschreibt, ziemlich bevorzugen .
Yannis
1
@MathAttack Die meisten anständigen IDEs können Kommentare ausblenden / falten. Aber ja, manchmal stören sie einfach.
Yannis
3

Ja, Kommentare sind eine Form der Dokumentation. Ob es sich um eine nützliche Dokumentation für jemanden handelt, der Ihren Code warten oder aktualisieren muss, ist eine offene Frage.

Ich weiß, du hast es als Wegwerfbeispiel gemeint, aber solche Sachen

print $foo; # this prints "bar"

ist nicht nützlich; es fügt nur visuelle Unordnung hinzu. Dokumentieren Sie nicht das Offensichtliche.

Blockkommentare am Kopf einer Methode oder Funktionsdefinition, die den Zweck der Funktion oder Methode (auf hoher Ebene ), Eingaben, Ausgaben, Rückgabewerte (falls vorhanden), Ausnahmen (falls vorhanden), Vorbedingungen und Nachbedingungen beschreiben, sind nützlich. aber nur in dem Maße, in dem sie jemandem sagen, wie die Funktion oder Methode verwendet werden soll. Sie erklären nicht, warum die Funktion existiert.

Wenn jemand anderes Ihren Code pflegen muss, müssen Sie die Anforderungen und das Design irgendwo dokumentieren, und dies wird normalerweise nicht im Quellcode selbst durchgeführt.

John Bode
quelle
3

Ich finde, dass das Festhalten an Bob Martins Ansatz von Clean Code normalerweise das Problem löst, ob Sie denken, dass Sie zu viel oder zu wenig kommentieren und die Dokumentation weglassen:

Wir sind Autoren. Und eine Sache über Autoren ist, dass sie Leser haben. In der Tat sind Autoren dafür verantwortlich, gut mit ihren Lesern zu kommunizieren. Wenn Sie das nächste Mal eine Codezeile schreiben, denken Sie daran, dass Sie ein Autor sind, der für Leser schreibt, die Ihre Bemühungen beurteilen.

... liegt das Verhältnis von Lese- und Schreibzeit weit über 10: 1. Wir lesen ständig alten Code, um neuen Code zu schreiben.

Mit anderen Worten, ist Ihr Code ohne die Dokumentation selbsterklärend? Es gibt keine festgelegten Regeln dafür (es sei denn, Sie arbeiten für jemanden wie Microsoft, dessen Dokumentation öffentlich zugänglich ist). Es liegt hauptsächlich daran, dem zukünftigen Leser des Codes zu helfen, der häufig Sie sind.

Chris S.
quelle
2

Die Dokumentation sollte das Warum nicht das Wie dokumentieren . Das Wie sollte im Code selbstverständlich sein, es sei denn, es handelt sich um einen arkanen Optimierungstrick oder eine andere sprachspezifische Technik, die normalerweise nicht vorkommt.

Das Warum sollte wahrscheinlich nicht im Code enthalten sein, es sollte sich an einer anderen Stelle wie einem Produkt-Backlog befinden, das dazu bestimmt ist, Kommentare mit Story-IDs festzuschreiben, nach denen in einem Änderungsprotokoll oder einem Filialnamen gesucht werden kann.


quelle
1
Wirklich knifflige Dinge sollten in einer wissenschaftlichen Arbeit (oder gelegentlich in einem Patent) enthalten sein.
Donal Fellows
2

Kommentare sind eine Form der Dokumentation. Eine minderwertige Form, die darauf hindeutet, dass Sie einen Bereich Ihres Codes gefunden haben, der besser berücksichtigt werden kann.

Es hört sich so an, als würden Sie die Dinge zwanghaft kommentieren. Andere Optionen zu haben kann eine gute Sache sein. Ich kann mir drei überlegene Formen der Dokumentation vorstellen:

1) Berücksichtigen Sie Ihren Code besser. Anstatt einen Kommentar hinzuzufügen, extrahieren Sie eine Methode oder Funktion, deren Name der Text des Kommentars ist, den Sie schreiben wollten. Der Code sagt also, was Ihr Kommentar sagen wollte.

2) Tests. Dies ist die Form der Dokumentation, nach der ich normalerweise suche. Unit-Tests und Abnahmetests sind lebende Dokumentationen und können leicht gelesen werden, wenn viele sinnvolle Methoden verwendet werden, um Absichten auszudrücken, wie in Punkt 1.

3) Für Skripte die Option --help. Hier können Sie verrückt nach doc werden. Halten Sie sich an Beispiele und antizipieren Sie, was der Benutzer benötigen würde.

Wenn Sie dazu neigen, einen Kommentar einzugeben, prüfen Sie zusammenfassend, ob es eine Möglichkeit gibt, mit dem Leser zu kommunizieren, indem Sie den Code besser strukturieren. Oder gibt es einen Test, der mitteilt, warum dieser Code vorhanden ist? Wenn Sie immer noch geneigt sind, dies zu kommentieren, geben Sie eine Niederlage zu und tun Sie es.

Mike Hogan
quelle