| 

.NET C# Java Javascript Exception

7
Hallo Zusammen, schon wieder ein Bedürfnis das Meinungen benötigt. :-)
So wie ich es bis jetzt realisiert habe gibt es mehre Kommentar-Möglichkeiten, Klassen, Methoden u.s.w. zu beschreiben.
1.
[Description("Komentar")]
public void Function() {}

2.
/// <summary>Kommentar</summary>
public void Function() {}

3.
/* Kommentar */
public void Function1() {}
// Kommentar
public void Function2() {}

Viele von den Kommentar-Möglichkeiten lassen sich auf alle Elemente (Klassen, Methoden, u.s.w.) anwenden. Nun habe ich raus gefunden dass z.B. für den Objektexplorer die Kommentar-Möglichkeit (1) wichtig ist. Das gilt auch für eingebundene Assemblies.

Die dritte Möglichkeit verwende ich momentan für interne Beschreibung.

Meine Frage ist also: Wofür wird die zweite Möglichkeit verwendet? Wenn es eine Sinnvolle Funktion hat, möchte ich ungern immer (1) und (2) parallel verwenden wegen der Wartbarkeit und Tipparbeit.

Wie Dokumentiert Ihr euren Programm-Code in VS? Welche Tools sind erwähnenswert?

Ich kenne von anderen Programmierumgebung (Linux) ähnliche Kommentar-Möglichkeiten wie (2) die mit Tools schön aufbereitet werden können. Bei VS habe ich dies noch nicht gefunden, außer der Möglichkeit (1) und dem ObjektExplorer.
/** @brief Komentar */
public void Function2() {}


Vielen Dank; Grüße smartic
11.03.2011
smartic 490 7
7 Antworten
11
Die Frage ist was du kommentierne möchtest.

1.Attribute
[Description("Komentar")]
public void Function() {}

Diese Attribute werden dynamisch ausgewertet. Z.bsp. Bei unit Tests in der Testliste, in der WorkflowFoundation in dem Designer und bei WindowsForm im Propertygrid.

s. u.a. http://msdn.microsoft.com/en-us/library/aa302326.aspx



2. XML Tag Kommetare

Für Source Code Kommentare solltest du die 3 Slashes verweden
z. Bsp.

///<summary>
///Mein Text der auch im Intellisense erscheint
/// </summary>
/// <param name="para1">Der Wert der die Funktion braucht.</param>
/// <param name="para2">Numerischer Wert der zwischen 0 und 5 liegen muss.</param>
public void meineMethode(string para1,int para2)
{
}


Bei den XML Kommentare hast du den Vorteil dass man sie schon in der IDE sieht.
So weiß man schon was die Methode tut und welche Parameter sie bekommt und sogar wie diese aussehen sollen

s. a. http://openbook.galileocomputing.de/visual_csharp_2010/visual_csharp_2010_15_005.htm

Mit tools wie z.bsp. Sandcastle, kannst du dir dann daraus sogar HilfeDateien generieren lassen die (fast) wie die MSDN aussehen

3. Einfache Kommentare
Die Einfachen Kommentare
wie
//Test

solltest du nur diret im Code benutzen um kurz eine Semantik zu erklären.
11.03.2011
Gentlehag 1,0k 2 7
5
Ich würde ebenfalls die 2. Variante bevorzugen.

Und zwar nach folgendem Schema:

/// <summary>Grundlegende Beschreibung was die Funktion tut</summary>
/// <param name="name">Beschreibung des Parameters "Name"</param>
/// <param name="alter">Beschreibung des Parameters "Alter"</param>
/// <returns>Was gibt die Funktion zurück?</returns>
/// <remarks>Eine ausführlichere Beschreibung der Funktion wenn nötig</remarks>

Wenn die Funktion Fehler schmeißen kann
/// <exception cref="System.IO.FileNotFoundExceptionB">Beschreibung wann und warum diese Exception geworfen wird.</exception>

Bei generischen Typen wie List<T>
/// <typeparam name="T">The element type of the list</typeparam>

Für Properties
/// <value>The Name property gets/sets the _name data member.</value>

Bei Toolkits und Bibliotheken auf jeden Fall zu empfehlen - die ein Stück Beispielcode:
/// <example>
/// Dieses Beispiel zeigt die Verwendung der String-Extension <see cref="Left"/>.
/// <code>
/// "MyString".Left(3);
/// //Returns: "MyS"
/// </code>
/// </example>


Ausführliche Informationen zu den XML-Kommentaren und welche es noch gibt findest du in der MSDN unter:
Empfohlene Tags für Dokumentationskommentare (C#-Programmierhandbuch)

Zwei der Grundlegenden Vorteile dieser Variante sind:
1. die Beschreibungen werden vom IntelliSense gelesen und angezeigt



2. du kannst mit Tools wie SandCastel oder GhostDoc dir Hilfedateie und API-Dokumentationen erstellen lassen wie diese hier:

11.03.2011
Floyd 11,0k 3 9
Floyd 11,0k 3 9
1
das ist eine Top-Qualität Antwort. ReSpEcT.
pinchbeck 20.03.2011
2
Ich verwende GhostDoc.
Die Free-Edition hat bislang gut gereicht.

Edit:
In Visual Studio gibt es bei den Projekteigenschaften unter
Build -> Output -> XML documentation file
eine Checkbox. Wird diese gesetzt und ein Pfad zur XML-Datei angegeben, wirst du gezwungen, jede öffentliche Klasse und Methode mit Kommentaren zu versehen (zumindest bei Warning level4 und bei der Einstellung "Treat warnings as errors -> All"), was auch auf jeden Fall Sinn macht.
Als Fehlermelder erhält man :
Warning as Error: Missing XML comment for publicly visible type or member
11.03.2011
Jürgen Luhr 6,9k 1 8
GhostDoc ist echt fein. Habe es gerade ausprobiert und erzeugt erstaunlich gute und default Kommentare und Beschreibungen. :-)
smartic 11.03.2011
Cool :o) , die Version 3 arbeitet ja jetzt auch mit vs2010, ich hatte bisher nur die v2 für vs2008.
Jorgen Schumann 11.03.2011
1
also beim kurzen ausprobieren: Deine "2. Möglichkeit" wird von VS benutzt, um Tooltips anzuzeigen.
11.03.2011
nabuchodonossor 1,2k 4
1
Das DescriptionAttribute (1.) wird verwendet, um das Item in visuellen Designern (WindowsForms-Designer für Controls, PropertyGrid in einer eigenen Anwendung etc.) zu beschreiben. Dass der "Objektexplorer" (=Objektbrowser?) sich darauf abstützt, wäre mir neu.

Mit der Variante 2 dokumentierst Du die API. Mit den richtigen Tools (z.B. Sandcastle) kannst Du daraus Hilfe-Dateien (*.chm) generieren oder auch sowas schönes wie die MSDN-Hilfe. Und ganz unmittelbar nutzt es Dir, weil VS das für Intellisense-Tooltips benutzt, wie nabuchodonossor schon angemerkt hat.

Variante 3 ist für "normale" Code-Kommentare wie "die nächsten 3 Zeilen sind ein schrecklicher Hack, aber ich hatte keine Zeit" ;-)

Du solltest, als Faustregel, möglichst reichlich von Variante 2 Gebrauch machen. Die ist auch deutlich ausdrucksstärker und mächtiger als Variante 1, die eher für spezielle Einsatzszenarien in Frage kommt. Beide richten sich aber an unterschiedliche Zielgruppen, weshalb es durchaus sinnvoll sein kann, beide parallel (normalerweise dann mit unterschiedlichen Texten) zu verwenden.
11.03.2011
Matthias Hlawatsch 8,4k 2 8
Gentlehag war offenbar schneller und hat seine Antwort gepostet, während ich noch getippt habe.
Matthias Hlawatsch 11.03.2011
Die Faustregel Variante 2 zu verwenden, nehme ich mir mal zu Herzen. :-)
smartic 11.03.2011
0
@Gentlehag; Dass mit Sandcastle muss ich bei Gelegenheit ausprobieren. :-)

Ich habe gerade gesehen dass ich da etwas mit dem ObjekExplorer/Objektkatalog verwechselt habe. Im Objektkatalog wird natürlich die Xml-Dokumentation verwendet. Ich verwende aber gerne beim Programmieren die gehe zu Definition um die Beschreibung anzeigen zu lassen - ähnlich wie unter Java und Eclipse. Und was dort steht muss anscheinend per Description Attribut definiert werden. Zumindest ist dies bei meinen Assemblies aufgefallen wenn ich diese in ein anderes Projekt einbinde.
11.03.2011
smartic 490 7
Funktioniert ganz gut, es gibt auch weitere generatoren. Damals hatte ich mal noch NDOC und Doxygen getestet. Weiß aber nicht ob diese noch aktuell sind.

Insbesondere wenn du einen automatisierten BuildProzess hast kannst du dir das jede Nacht automatisch erstellen und online aktualisieren lassen.

Aber ist ein anderes Thema. :-)
Gentlehag 11.03.2011
Doxygen ist mir ein Begriff aus der Linuxwelt, der mir beim "FragenStellen" nicht mehr eingefallen ist. ;-)
smartic 11.03.2011
@gentlehag: ndoc wurde schon vor Jahren aufgegeben. Ein wenig erfährt man über die Hintergründe, Wiederbelebungsversuche und mögliche Alternativen hier: http://sourceforge.net/projects/ndoc/forums/forum/112809
Matthias Hlawatsch 11.03.2011
0
Jetzt fällt mir noch etwas ein: Kommentiert Ihr Interfaces gleich wie die Implementationen. Nach meinem Gefühl erübrigen sich die Kommentierung für die Interface-Implementierung (die implementierenden Klassen des Interfaces) in den meisten Fällen da die Interface-Kommentare die gleichen für die Implementierung sind. Oder wie handhabt Ihr das?
11.03.2011
smartic 490 7
2
Das kommt darauf an.
Z.bsp. kan ndein interface "IEntityPersistor" sein.
und die Implementieren "SQL DataBase Persistor"

dann würde im IEntityPersistor kommentare wie "Speichert / lädt entitäten sein"

in der Implementierung wäre es eher "Inserted einen Datensatz im SQL Server der die Entität wiederspiegelt"

Natürlich gibts redundante fälle, da hilft ghostdoc
Gentlehag 11.03.2011
Im Fall einer reinen Redundanz verwende ich, in Anlehnung an javadoc:
/// <summary>
/// <inheritdoc />
/// </summary>
Visual Studio berücksichtigt das (im Gegensatz zu Eclipse in der Java-Variante) zwar leider nicht, aber Sandcastle soll es wohl können, und im Code selbst hantiert (hoffentlich) nur jemand mit der Implementierung, der sie gut kennt oder selbst geschrieben hat - "weiter entfernte" Nutzer sehen das Interface.
Matthias Hlawatsch 11.03.2011

Stelle deine .net-Frage jetzt!