Alcune delle affermazioni che seguono sono piuttosto personali, anche se con qualche giustificazione, e intendono essere così.
Tipi di commento
Per la breve versione ... Uso i commenti per:
- commenti finali che spiegano i campi nelle strutture di dati (a parte quelli, non uso davvero i commenti a riga singola)
- commenti multilinea eccezionali o orientati allo scopo sopra i blocchi
- documentazione per utente pubblico e / o sviluppatore generata dalla fonte
Leggi sotto per i dettagli e (forse oscuri) motivi.
Commenti finali
A seconda della lingua, utilizzando commenti a riga singola o commenti a più righe. Perché dipende È solo un problema di standardizzazione. Quando scrivo codice C, preferisco il codice ANSI C89 vecchio stile per impostazione predefinita, quindi preferisco averlo sempre /* comments */
.
Pertanto, lo vorrei in C per la maggior parte del tempo, e talvolta (dipende dallo stile della base di codice) per le lingue con una sintassi simile al C:
typedef struct STRUCT_NAME {
int fieldA; /* aligned trailing comment */
int fieldBWithLongerName; /* aligned trailing comment */
} TYPE_NAME;
Emacs è simpatico e lo fa con me M-;
.
Se il linguaggio supporta i commenti a riga singola e non è basato su C, sarò più chiuso per utilizzare i commenti a riga singola. Altrimenti, temo di aver preso l'abitudine. Il che non è necessariamente negativo, in quanto mi costringe a essere conciso.
Commenti su più righe
Non sono d'accordo con il tuo precetto usando i commenti a riga singola per questo è visivamente più attraente. Io lo uso questo:
/*
* 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.
*/
O questo (ma non lo faccio più spesso, tranne che su una base di codice personale o principalmente per le comunicazioni sul copyright - questo è storico per me e proviene dal mio background educativo. Sfortunatamente, la maggior parte degli IDE si rovina quando si utilizza il formato automatico) :
/*
** 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.
*/
Se fosse davvero necessario, allora commenterei in linea usando ciò che ho menzionato in precedenza per i commenti finali, se ha senso usarlo in una posizione finale. In un caso di restituzione molto speciale, ad esempio, o per documentare switch
le case
dichiarazioni di una (raro, non uso switch spesso) o quando documento i rami in un if ... else
flusso di controllo. Se questo non è uno di questi, di solito un blocco di commenti al di fuori dell'ambito che delinea i passaggi della funzione / metodo / blocco ha più senso per me.
Li uso molto eccezionalmente, tranne se per la codifica in una lingua senza supporto per i commenti della documentazione (vedi sotto); nel qual caso diventano più diffusi. Ma nel caso generale, è davvero solo per documentare cose che sono destinate ad altri sviluppatori e sono commenti interni che devono davvero distinguersi. Ad esempio, per documentare un blocco vuoto obbligatorio come un blocco "forzato" catch
:
try {
/* you'd have real code here, not this comment */
} catch (AwaitedException e) {
/*
* Nothing to do here. We default to a previously set value.
*/
}
Il che è già brutto per me, ma lo tollererei in alcune circostanze.
Commenti sulla documentazione
Javadoc e al.
Di solito li userei su metodi e classi per documentare le versioni che introducono una funzione (o la cambiano) soprattutto se si tratta di un'API pubblica e per fornire alcuni esempi (con chiari casi di input e output e casi speciali). Sebbene in alcuni casi un caso unitario possa essere migliore per documentarli, i test unitari non sono necessariamente leggibili dall'uomo (non importa quale DSL-cosa usi).
Mi disturbano un po 'per documentare campi / proprietà, poiché preferisco i commenti finali per questo e non tutti i framework di generazione di documentazione supportano i commenti finali della documentazione. Doxygen lo fa, ad esempio, ma JavaDoc no, il che significa che hai bisogno di un commento in alto per tutti i tuoi campi. Tuttavia, posso sopravvivere, dato che le linee Java sono relativamente lunghe la maggior parte delle volte, quindi un commento finale mi spaventerebbe ugualmente estendendo la linea oltre la mia soglia di tolleranza. Se Javadoc avesse mai preso in considerazione l'idea di migliorarlo, sarei comunque molto più felice.
Codice commentato
Uso una riga singola per un solo motivo, in linguaggi simili al C (tranne che per la compilazione del C rigoroso, dove non li uso davvero): commentare le cose durante la codifica. La maggior parte degli IDE dovrà attivare o disattivare i commenti a riga singola (allineati sul rientro o sulla colonna 0), e questo si adatta a questo caso d'uso per me. L'uso della commutazione per i commenti su più righe (o la selezione a metà riga, per alcuni IDE) renderà più difficile il passaggio tra commenti / commenti.
Ma poiché sono contrario al codice commentato in SCM, di solito è di breve durata perché eliminerò blocchi commentati prima di impegnarmi. (Leggi la mia risposta a questa domanda su "commenti in linea e SCM modificati" )
Stili di commento
Di solito tendo a scrivere:
- frasi complete con grammatica corretta (inclusa la punteggiatura) per i commenti della documentazione, poiché dovrebbero essere lette in seguito in un documento API o anche come parte di un manuale generato.
- ben formattato ma più impreciso su punteggiatura / maiuscole per blocchi di commenti su più righe
- blocchi finali senza punteggiatura (a causa dello spazio e di solito perché il commento è breve, che si legge più come un'istruzione tra parentesi)
Una nota sulla programmazione alfabetica
Potresti voler interessarti alla programmazione letterata , come introdotto in questo documento di Donald Knuth .
Il paradigma della programmazione alfabetica, [...] rappresenta un allontanamento dalla scrittura di programmi nel modo e nell'ordine imposti dal computer, e consente invece ai programmatori di sviluppare programmi nell'ordine richiesto dalla logica e dal flusso dei loro pensieri. 2 I programmi letterati sono scritti come un'esposizione ininterrotta della logica in un linguaggio umano ordinario, proprio come il testo di un saggio [...].
Gli strumenti di programmazione alfabetica vengono utilizzati per ottenere due rappresentazioni da un file sorgente letterato: uno adatto per l'ulteriore compilazione o esecuzione da parte di un computer, il codice "aggrovigliato" e un altro per la visualizzazione come documentazione formattata, che si dice sia "intessuta" dal fonte alfabetizzata.
Come nota a margine ed esempio: il framework JavaScript underscore.js , nonostante la non conformità con il mio stile di commento, è un ottimo esempio di una base di codice ben documentata e di una fonte annotata ben formata , sebbene forse non sia la migliore da usare come un riferimento API).
Queste sono convenzioni personali . Sì, potrei essere strano (e potresti esserlo anche tu). Va bene, purché tu segua e rispetti le convenzioni sul codice del tuo team quando lavori con colleghi, o non attacchi radicalmente le loro preferenze e convivi bene. Fa parte del tuo stile e dovresti trovare la linea sottile tra lo sviluppo di uno stile di codifica che ti definisce come un programmatore (o come un seguace di una scuola di pensiero o organizzazione con cui hai una connessione) e il rispetto della convenzione di un gruppo per coerenza .
:3,7 Align //
per allineare i commenti sulle righe 3-7.