Perché i blocchi /// comment sono importanti?


49

Qualcuno una volta ha detto che dovremmo anteporre a tutti i nostri metodi i /// <summary>blocchi di commento (C #) ma non ha spiegato il perché.

Ho iniziato a usarli e ho scoperto che mi infastidivano un po ', quindi ho smesso di usarli ad eccezione delle librerie e dei metodi statici. Sono ingombranti e dimentico sempre di aggiornarli.

C'è qualche buon motivo per usare i /// <summary>blocchi di commenti nel tuo codice?

Di solito uso sempre //commenti, sono solo i /// <summary>blocchi che mi chiedevo.


1
Non ero sicuro che questi blocchi di commenti fossero preferenze personali o standard raccomandati
Rachel,

1
Penso anche così.
Ryan Hayes,

30
Penso che questo sia esattamente il tipo di domanda che appartiene qui. C'è una buona probabilità che questo venga chiuso su StackOverflow come soggettivo.
Paddyslacker,

Utilizzare i blocchi <summary> se si desidera generare documentazione. Ciò avrebbe senso se stai creando un'API da usare per gli altri. Fare questo per ogni metodo è eccessivo e diminuisce la flessibilità.
Macneil,

Risposte:


91

Usali il più possibile.

Sì, quelli sono commenti speciali che diventano la documentazione per il metodo. I contenuti <summary>, i tag dei parametri, ecc. Che vengono generati vengono visualizzati in intellisense quando tu o qualcun altro si appresta a chiamare il metodo. Possono essenzialmente vedere tutta la documentazione per il tuo metodo o classe senza dover andare al file stesso per capire cosa fa (o provare a leggere la firma del metodo e sperare per il meglio).


22
+1 Usali assolutamente. Saresti sorpreso di quanto sia utile averli se riutilizzi mai i tuoi componenti e hai tutta quella fantastica documentazione disponibile in intellisense.
Walter,

4
Inoltre, se stai utilizzando Visual Studio e inizi una riga con /// appena prima di una dichiarazione di classe, metodo o campo, VS genererà la struttura della documentazione XML per te - devi solo compilarla. Sono d'accordo che occupi molto spazio sullo schermo, ma direi che è un degno compromesso. Inoltre, F # ha un supporto migliore (ad es. Non è necessario usare <summary> e </summary> poiché sono "ipotizzati").
ShdNx,

7
Poiché questa risposta è già la scelta migliore, aggiungerò solo il mio commento: quando ho scoperto che il sommario è usato per intellisense e che i miei progetti sono cresciuti alle loro dimensioni attuali, sono stato molto contento di aver trovato questa funzione. Ricordare a cosa servono i miei metodi e le mie classi stava diventando una grande sfida e documentare il codice tramite questo meccanismo ha semplificato notevolmente le cose, permettendomi di concentrarmi su nuovo codice e risusabilità invece di cercare di ricordare ciò che è stato fatto mesi fa.
JYelton,

3
Solo una cosa da aggiungere, questi commenti non sono compilati nella dll, devi consegnare il file xml associato alla tua dll.
Benjol

Sono utili, ma rendono la classe corrente illeggibile. Vorrei che ci fosse un altro modo per non ingombrare il codice.
Jeroen van Langen,

17

Sì, usali assolutamente per tutto ciò che vuoi conservare o potrebbe essere condiviso.

Inoltre, usali insieme a Sandcastle e Sandcastle Help File Builder , che prende l'output XML e lo trasforma in una splendida documentazione in stile MSDN.

Nell'ultimo posto in cui ho lavorato, abbiamo ricostruito la documentazione ogni sera e l'ho ospitata come homepage interna. Le iniziali della società erano MF, quindi era MFDN;)

Normalmente però produco solo un file .chm, che può essere facilmente condiviso in giro.

Rimarrai sorpreso da quanto sei dipendente dalla documentazione di tutto una volta che inizi a vederlo in formato MSDN!


1
Il link al blog sembra essere morto (ultimo post 5 anni fa con HTML interrotto in tutta la pagina) e la posizione del progetto si è spostata. Hai un link aggiornato per Sandcastle?

12

Se il tuo standard di codifica richiede che tu usi tali commenti (e uno standard di codifica per un'API o un framework potrebbe richiederlo), allora non hai scelta, devi usare tali commenti.

Altrimenti, considera seriamente di non utilizzare tali commenti. Puoi evitarli nella maggior parte dei casi modificando il codice in questo modo:

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool SecurityCheck( User user ) {

    }

per

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool IsAuthorizedToAccessResource( User user ) {

    }

per

    public bool IsAuthorizedToAccessResource( User user ) {

    }

11
Mentre sono d'accordo che il codice dovrebbe essere auto-documentato il più spesso possibile, suggerisco di usare questi tipi di commenti ogni volta che è possibile (e più spesso dei // commenti generici). I commenti /// XML sono progettati per funzionare con IntelliSense, il che può rendere lo sviluppo più semplice mesi dopo la fine quando stai cercando di implementare alcune librerie che hai creato e non ricordi più come funziona più.
Matt DiTrolio,

2
E penso che non solo dal punto di vista di Intellisense, ma anche dal punto di vista della generazione automatica della documentazione, i commenti XML sono utili. Ma come per tutti i commenti, questo ha senso solo se i commenti stessi sono utili e si stanno aggiungendo al codice auto-documentato.
Vaibhav,

5
Concordo sul fatto che quando si scrivono classi pubbliche di un'API o di un framework, lo standard di codifica dovrebbe richiedere di inserire commenti nel codice in modo che IntelliSense e gli strumenti di documentazione possano collegarsi. Ma non è tutto il codice. A parte questa preoccupazione, l'approccio che sto sostenendo qui è, quando provi a rendere il tuo codice più pulito e chiaro, concentrati sul codice stesso, non sul commento che descrive il codice.
Azheglov,

3
@JYelton: il tuo commento travisa la mia risposta. Implicavo nomi più descrittivi, ma non necessariamente molto più dettagliati, certamente non un identificatore di 60 caratteri per una funzione pubblica chiamata frequentemente. Inoltre, hai quella che sembra essere una funzione altamente specializzata, ma richiede un tipo di dati molto generale (XmlDocument) - questo è un odore di codice. Quindi, l'identificatore di 60 caratteri descrive "come" e non "cosa" - di un metodo pubblico. Questo è un altro odore. Il messaggio principale è: pensa prima al codice, non al commento.
Azheglov,

2
@JYelton Il problema con il nome del tuo metodo non è che è descrittivo, ma piuttosto descrive almeno 2 operazioni separate e quindi dovrebbe essere refactored in almeno 2 metodi indipendenti.
Neal,

4

La tua classe, metodo e denominazione delle proprietà dovrebbero essere evidenti, quindi se ne hai bisogno, probabilmente è un odore.

Tuttavia, consiglierei di usarli su qualsiasi classe pubblica, metodo e proprietà in un'API, in una libreria, ecc ... Come minimo, genereranno i documenti per aiutare qualsiasi sviluppatore a usarlo e ti impediranno di avere per scriverli.

Ma comunque lo tagli, lo mantieni o li elimini.


11
La denominazione è una cosa, ma elencare i vincoli sui parametri o le eccezioni potenzialmente lanciate è ancora prezioso.
Adam Lear

Sì, ammetto che hai ragione, ma il più delle volte i vincoli dei parametri sono ovvi, vero?
John MacIntyre,

Non sono sicuro di essere d'accordo con John. Con questa logica, nessuno dei metodi del framework .net dovrebbe ottenere alcun aiuto Intellisense.
Vaibhav,

1
@vaibhav - Ho detto "Consiglierei di usarli su qualsiasi classe pubblica, metodo e proprietà in un'API, in una biblioteca, ecc ..." ... che riguarderebbe ciò di cui stai parlando, no?
John MacIntyre,

1
@John - strano, avrei potuto giurare di aver letto qualcos'altro quando ho scritto quel commento. Perché il tuo secondo paragrafo è esattamente quello che ho detto altrove in questa discussione. Quindi, devo avere delle pietre nella testa per aver scritto quel commento. Sì, sono d'accordo.
Vaibhav,

2

Se scopri che devi continuare a tornare indietro e modificare i tuoi commenti in modo che corrispondano al nuovo codice, in primo luogo potresti sbagliare. L'elemento di riepilogo dovrebbe contenere esattamente questo - un riepilogo - il cosa e il perché della cosa che stai riassumendo.

Descrivere come funziona qualcosa nei commenti viola DRY. Se il tuo codice non è abbastanza auto-descrittivo, forse dovresti tornare indietro e refactoring.


1

Sì, li ho creati. [quando si creano nuovi sistemi da zero]

No, non ne ho mai beneficiato. [quando si lavora su sistemi esistenti che necessitavano di manutenzione]

Ho scoperto che i commenti "Riepilogo" alla fine tendono a non essere sincronizzati con il codice. E una volta che ho notato alcuni commenti che si comportano male, tendo a perdere fiducia in tutti i commenti su quel progetto - non sei mai sicuro di quali fidarti.


I commenti non aggiornati possono tuttavia essere considerati un odore di codice, ancor più a livello di riepilogo. Se altri sviluppatori stanno cambiando le funzioni e non aggiornano il riepilogo di ciò che stanno facendo, si potrebbe sostenere che non stanno documentando correttamente il loro lavoro.
rjzii,

1

Dimenticare di fare qualcosa non lo rende una cattiva idea. Dimenticare di aggiornare qualsiasi documentazione è. Li ho trovati molto utili nella mia programmazione e le persone che ereditano il mio codice sono grate di averli.

È uno dei modi più visibili per documentare il tuo codice.

È una seccatura dover trovare il codice sorgente per leggere la documentazione in linea o scavare un documento che ripercorre quello che fa il codice. Se riesci a far apparire qualcosa di utile attraverso l'intelligenza, allora le persone ti adoreranno.


1

" Deve essere usato moltissimo, come me;) "

Giocavo con i commenti (///). Per una lezione puoi semplicemente fare un commento come questo

namespace test
{
    /// <summary>
    /// Summary description for Calendar.
    /// </summary>
    public partial class DatePicker : System.Web.UI.Page
    {

Ma, per un metodo, puoi aggiungere altro con la descrizione di parametri e tipi di ritorno.

/// <summary>
/// Assign selected cases to the participating users based on the filters and configurations
/// </summary>
/// <param name="noOfParticipants">No. of participants to the Table</param>
/// <param name="value">Value of the participant</param>
/// <returns>No Of Cases Assigned on successfull completion</returns>
public long AssignCasesToParticipatingUsers(int noOfParticipants,string value)
{

Puoi usare una scorciatoia per creare questo commento (///+Tab).


0

usandoli ad eccezione delle biblioteche

Questo è il momento in cui sono utili. Con la generazione della documentazione XML attivata e un riferimento all'assembly, senza il suo progetto, mostrerà maggiori dettagli in intellisense.

Ma per gli interni del progetto attuale, si intromettono.


0

Li uso, ma come altre persone hanno detto non universalmente. Per i metodi piccoli possono essere facilmente più grandi del codice che stanno spiegando. Sono molto utili per generare documentazione che può essere fornita a persone nuove al sistema in modo che abbiano qualcosa a cui fare riferimento durante l'apprendimento. Anche se, come programmatori, di solito possiamo scovare qual è il codice perché è bello avere i commenti per guidarci e agire come una stampella. Se deve essere annotato da qualche parte, nel codice è il punto in cui è più probabile che rimanga aggiornato (più probabilmente di un documento Word fluttuante).


0

Uso l'equivalente in VB (dal momento che non mi permettono di usare C # - apparentemente è troppo difficile ... nessun commento.) Li trovo molto convenienti. Il più delle volte aspetto che la procedura o la funzione siano praticamente completate prima di inserirli, anche solo per evitare di dover modificare i commenti o di averli "fuori sincrono".

Non scrivo necessariamente un romanzo - solo le basi, la descrizione del parametro e alcune osservazioni (di solito quando c'è qualcosa di "fuori dall'ordinario" in corso lì dentro) - soluzione alternativa o altra merda che preferirei non avere lì ma nessuna scelta "per ora".) (Sì, lo so, "per ora" può durare anni.)

Sono gravemente irritato dal codice non commentato. Un consulente ha scritto la versione iniziale di uno dei nostri componenti e non ha commentato nulla e la sua scelta di nomi lascia a desiderare qua e là. È passato più di un anno e stiamo ancora sistemando le sue cose (oltre a lavorare sulle nostre cose).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.