2009-06-11 10 views
12

Ieri stavo passando attraverso un mio codice che non aveva senso per me in un primo momento (scritto meno di un mese fa). Quando l'ho capito, ho rapidamente aggiunto dei commenti per evitare l'esercizio. Questo mi ha fatto pensare che, se avessi commentato il codice come, l'ho scritto, i miei commenti potrebbero non aver aiutato un secondo "io" a decifrare il codice.When To Code Codice (L'altro "Quando")

Quando nella vita del codice è meglio aggiungere commenti? Se la risposta è che dipende, da cosa dipende?

Nota: sto chiedendo esperienza- o, meglio ancora, le risposte della letteratura basata, dà fastidio solo rispetto "pensieri sul tema" Inoltre, si prega di notare che questa domanda assume che è necessario codice di commento (a volte, a volte o sempre).

+1

Modificato per rendere la domanda più chiara (spero), altrimenti otterrete le solite risposte di scorie. Vieni a pensarci, ne hai già uno. –

+0

Grazie a Neil, le correzioni sono apprezzate e rendono più chiara la domanda. Penso davvero che uno degli aspetti più sorprendenti di SO sia che le persone modificano le mie domande senza distruggere la mia (strana? Cattiva? Originale?) Prosa. –

+0

Duplicato: http://stackoverflow.com/questions/20922/do-you-comment-your-code –

risposta

1

In linea di principio, si dovrebbe commentare il codice mentre lo si scrive, ma, come la propria esperienza ha appena dimostrato, spesso si è troppo vicini al problema per scrivere i migliori commenti. Secondo la mia esperienza, questo è un argomento forte per una qualche forma di revisione del codice, sia che la revisione continua della programmazione di coppia o qualcosa di più formale, a seconda dei casi - "commenta che in modo così approfondito in così e in modo" dovrebbe essere previsto esito della revisione da parte di altri occhi.

+0

Bello, se hai il lusso di una recensione del codice. –

21

Si dovrebbe sempre commentare il codice che spiega perché un modulo fa qualcosa, non cosa (questo è ciò che il codice è per :)) Tutto ciò che non è chiaro sul motivo per cui qualcosa sta accadendo deve essere commentato. Il codice dovrebbe essere scritto abbastanza bene da essere capito da solo.

Ho intenzione di chiarire un po 'il mio ultimo commento. A volte penso che sia giusto commentare quale codice sta per fare (so che questo contraddice la mia precedente affermazione). Ci sono cose nel codice che alcune persone non saranno in grado di capire. Non è che il codice sia scritto male, è che i concetti che usano sono avanzati e le persone si confondono. Sto pensando a cose come la creazione ricorsiva di alberi, grafici, ecc. Cose che possono essere chiare per te, ma che potrebbero causare problemi agli altri. Penso che ciò avvenga caso per caso e dipende dal team con cui si sta lavorando.

È necessario scrivere sempre i commenti PRIMA di scrivere il codice. Dovresti sempre sapere esattamente cosa sta per fare qualcosa e perché prima di decifrarlo.

+1

che è esattamente il motivo per cui i metodi e le variabili dovrebbero avere nomi informativi e utili. –

+4

Intenzione nei commenti, non in funzione - se stai spiegando la funzione in un commento, le librerie che stai utilizzando non sono ben commentate nell'intenzione. –

+0

Interessante ... Intendo l'ultimo paragrafo, ovviamente. Prima di scrivere il codice. Hmmmm ... Ci proverò (penso di averlo provato prima ma è stata una lunga vita :) –

1

Penso che il problema con i commenti sia meno sul "quando" e più sul "come". Se le persone commentavano correttamente il codice in primo luogo, allora il "quando" non avrebbe importanza - se qualcuno potesse tornare al codice in qualsiasi momento e capire cosa si supponeva dovesse fare, allora i commenti sono ben fatti. Questo ovviamente va di pari passo con la scrittura di un codice buono e leggibile.

Ci sono un sacco di domande che fluttuano intorno allo stack overflow su come scrivere buoni commenti, (ad esempio Are there standard formats for comments within code?) ma fondamentalmente sta andando a differire tra organizzazioni e stili personali. L'obiettivo finale dei commenti è di aiutare a comprendere il codice.

Fintanto che si scrivono correttamente i commenti, quando li scrivi non dovrebbe fare alcuna differenza.

+0

+1 Mi piace la risposta, ma non sono affatto d'accordo. Proverò a scrivere i commenti prima di iniziare a codificare per vedere come va ... –

4

Ho ottenuto risultati migliori direttamente o poco dopo averlo scritto. Cioè, non mentre si codifica (tende a distrarmi), ma almeno prima di commettere una modifica o unirle di nuovo nel ramo principale.

Se non lo faccio direttamente, tendo a dimenticarlo oa preoccuparmene di meno. Detto questo, se rivisito il codice e noto che potrebbe utilizzare alcuni commenti, li aggiungo comunque.

Aggiornamento: altri fanno buoni punti di scrivere commenti prima di partenza, ma la mia esperienza è che essa lascia dietro di sé una scia di pseudocodice commentato-out (che è terribilmente distrazione e inutile).

8

Evito di commentare il codice, preferendo scrivere codice abbastanza chiaro da non richiedere commenti. Ma a volte hai alcune "conoscenze tribali" incorporate nel codice. In tal caso è necessario spiegare perché il codice fa quello che fa e non tanto quello che fa il codice.

+0

Grazie. So che alcune persone non scrivono commenti. Ma quelli sono i presupposti della domanda ... –

+0

Definitivamente! Non posso credere di aver dimenticato di dirlo. Questo è principalmente il modo in cui uso comunque i commenti, come un abbozzo di ciò che sto per scrivere. Se sto scrivendo un algoritmo con passi definibili, creerò un elenco numerato e scriverò ciò che ogni passo farà. Ovviamente tutto viene cancellato quando sono soddisfatto del codice. –

+0

Il problema con questo è che a volte è dolorosamente ovvio * cosa * sta facendo il codice ... ma non c'è alcun indizio sul perché la persona lo stia facendo. Più di una volta ho visto un codice molto bizzarro, che sembrava molto buggato. Potrei capire cosa ha fatto, e sembrava sbagliato ... ma si è scoperto che era giusto ... è solo che stava facendo una cosa molto bizzarra e dall'aspetto scorretto di proposito a causa di alcuni requisiti invisibili. Senza commenti, non c'è modo di sapere quel tipo di cosa. – Beska

5

La mia regola generale è: codice il più trasparente possibile (seguendo il tema del "codice di autocertificazione"). Quando quello che stai facendo non è auto-esplicativo, commentalo. Ad esempio, non è necessario commentare i termini di deallocazione. Effettuare il looping di un array per eseguire il lavoro sui suoi membri dovrebbe - non importa quanto sia semplice il ciclo, è più veloce e più facile capire un commento di codice piuttosto che attraversare il ciclo e assicurarsi che non stia facendo nulla di inaspettato.

Per quanto riguarda QUANDO, preferisco "prima di scrivere il codice". Non lo farai giustizia dopo che il codice è stato scritto. Scrivi un commento che spiega le tue intenzioni, quindi esegui quelle intenzioni nel codice. Controlla il commento per assicurarti che sia ancora pertinente e che tu sia GTG.

Si consiglia vivamente Code Complete come una risorsa molto solida su quando e come commentare il codice (tra le altre migliori pratiche).

+0

Bello, grazie per il paragrafo 2. Dovrò provare questo ... –

0

Penso che sia necessario commentare il proprio codice ogni volta che sta facendo qualcosa che non è completamente ovvio dal codice sorgente stesso. Ovviamente questo dipenderà da molti fattori, uno dei quali è il tuo pubblico.

Quando scrivo codice che so che sarò l'unico con cui lavoro, i miei commenti tendono ad elencare solo i posti in cui c'è un comportamento strano o codice che ho preso da qualche altra parte. Il più delle volte, il codice che ho scritto in passato ha perfettamente senso per me solo guardando la fonte.

Detto questo, quando scrivo un tutorial che spero che molte persone leggeranno, commenterò ogni sezione del codice e spiegherò che cosa fa ogni riga al di fuori delle strutture di programmazione di base. In questo modo, quando stanno leggendo il codice cercando di capire cosa sta succedendo, la spiegazione inglese completa è proprio sopra la linea del codice stesso.

+0

Ciao Ryan, potresti controllare che stai rispondendo alla domanda che ho posto? Grazie. –

2

Ho intenzione di cantare di nuovo la stessa canzone: do a "Clean Code" (Robert C. Martin) una lettura. Come ho sostenuto in this post

C'è un paio di capitoli eccellenti sulle convenzioni di denominazione, leggibilità del codice e anche COMMENTI. Consigli ben supportati su come e quando scrivere commenti nel tuo codice.

+0

Non ti ho fatto alcun downvote (né ti ho ancora in precedenza) ma ti dispiacerebbe spiegare un po 'perché questo è rilevante (se lo è)? –

+2

Clean Code ha un capitolo su quando e come scrivere commenti e capitoli su come scrivere e denominare funzioni e variabili in modo che non sia necessario scrivere commenti – Logan5

+0

esattamente come spiegato da Logan5. C'è un capitolo eccellente di capitoli su convenzioni di denominazione, leggibilità del codice e anche COMMENTI. Consigli ben supportati su come e quando scrivere commenti nel tuo codice. –

1

Di solito scrivo alcuni commenti rapidi su aree difficili mentre sto andando, e poi quando finisco un pezzo importante (una classe completata, per esempio), passo e commenta tutto più completamente, assicurandomi che qualsiasi commento Ho già fatto riflettere la realtà attuale. Uno dei peggiori scenari è commentare qualcosa, quindi apportare un cambiamento significativo e non modificare i commenti per riflettere tale cambiamento. In molti casi è peggio che non commentare perché potresti fornire informazioni false al lettore del tuo codice e spesso crederanno ai commenti sul codice stesso.

+0

+1 Interessante, grazie per quello ... è un grave trabocchetto. –

+0

Mi imbatto in particolare quando il commento dice quali altre parti del codice usano la cosa che viene commentata. Questi commenti possono essere utili per capire come il programma si adatta - ma è così facile che le altre parti vengano rimpiazzate o rimosse o semplicemente rinominate lasciando commenti che puntano a loro come immutati e fuorvianti. – Anon

8

Quando qualcuno lo esamina per te, e loro dicono "Non capisco questo po '".

+0

Grazie. Divertente, vero, e tu in realtà hai capito la domanda. –

+1

Sono d'accordo con questo ... è vero che dovrebbe essere commentato allora. Ma davvero, avrebbe dovuto essere commentato prima di allora. Il rischio con questo approccio è che non sarai in grado di commentarlo quando qualcun altro ha bisogno di te (perché sei morto, morto, hai dimenticato cosa stavi facendo, qualunque cosa.) – Beska

+0

Penso che Scott stia partendo dal presupposto che tu abbia effettivamente un processo di revisione in atto. Altrimenti l'attesa potrebbe essere di 5 anni ... –

1

ho davvero vi incoraggio a leggere questo libro: Code Craft: The Practice of Writing Excellent Code

C'è un intero capitolo su questo argomento.

Ecco alcuni concetti chiave da quel capitolo:

  • imparare a scrivere abbastanza commenti, e non di più. Favorire la qualità, non la quantità.
  • Trascorri il tuo tempo scrivendo il codice che non ha bisogno di essere sostenuto da tonnellate di commenti.
  • I buoni commenti spiegano perché non come.
  • Quando ti ritrovi a scrivere commenti densi per spiegare, fai un passo indietro. C'è un problema più grande da risolvere?
  • ecc
+0

Potresti condividere il nome del capitolo, se ce l'hai? –

+0

È il capitolo 5: "Un commento positivo - Come scrivere i commenti del codice" – VVS

+0

David, non ho intenzione di svenderti perché non lo faccio, ma potresti per favore considerare se questo risponde alla domanda che chiedo? Grazie. –

6

Se hai intenzione di commentare più tardi, probabilmente non commentare affatto.

+0

quindi, prima, va bene, allora, Jon? Prima di cosa? Questa è la domanda ... –

+1

Ho commentato subito dopo aver finito di scrivere un metodo. In questo modo i commenti sono aggiornati e accurati. Se commento prima, mi dimentico sempre di cambiare qualcosa nei commenti. – Malfist

1

Sono d'accordo con i ragazzi di cui sopra riguardo al commento "PRIMA" del codice. Questo ti aiuterà a ricordare lo scopo della funzione/metodo/blocco di codice. È facile seguire le tracce quando si codifica e si dimentica l'intenzione originale. Ad esempio se stai scrivendo una funzione getFoo() e non riesci a ricordare cosa dovrebbe restituire, allora sei ritardato. Tuttavia, se si sta scrivendo una funzione che esegue diversi calcoli sgradevoli mentre si scorre attraverso più set di dati, i commenti potrebbero essere di aiuto.

+0

Interessante, anche se ora penso che potrei essere solo ritardato. –

1

Ho sentito parlare (ma non riesco a trovare) il "Principio della Necessità" rispetto al campo dell'Educazione. Per dirla chiaramente, gli studenti imparano quando e cosa hanno bisogno di imparare. Esistono analogie con TDD (solo codice di scrittura con un test fallito per dimostrare la sua necessità) e Lean (Just In Time, in particolare). Penso che ciò che hai dimostrato con il commento di ieri fosse l'applicazione del Principio della Necessità a commentare, e penso che il modo in cui hai proceduto, e il tuo programma, sia andato bene.

Nel momento in cui scriviamo un metodo, siamo consapevoli di ciò che è importante in merito alle questioni immediate di interesse; come si inserisce nell'altro codice che stiamo scrivendo oggi, quali falsi percorsi abbiamo preso mentre lo scrivevamo, perché lo abbiamo scritto in primo luogo. Ma noi (spesso) non sappiamo quello che vorremmo sapere su di esso in futuro, anche solo un mese dopo. Quando abbiamo bisogno di sapere qualcosa di più su di esso, e quando è doloroso acquisire quella conoscenza - è un buon momento per registrare quella nuova conoscenza.

Non sto dicendo che non dovresti scrivere commenti prima/durante/immediatamente dopo aver scritto il codice: è una questione di standard e stile personale e di squadra. Ma quando ti rendi conto di una carenza di documentazione, è un buon momento per correggerlo.

+1

+1 per quello. Questo è troppo carente per i miei gusti, ma le risposte Zen più mature sono :) –

1

io non sempre arrivare scrivere questo perfettamente, ma idealmente, preferisco

  • Stub fuori il codice e aggiungere commenti su ciò che metodi/classi dovrebbero fare
  • test di scrittura per la loro copertura (TDD)
  • torna gli stub e compilare il codice di superare le prove, i commenti che vi aiuteranno a ricordare ciò che è necessario fare

ho trovato che questo scorre abbastanza bene per me. Inoltre, non mi sono collegato a nessuna "letteratura" sull'argomento perché penso che qualsiasi letteratura sui commenti probabilmente sarà sciocca, o che cosa ha funzionato per qualcun altro. Potrebbe o potrebbe non funzionare per te.

Modifica: ho scoperto che quando scrivo commenti molto prolissi, mi aiuta davvero a sistemare i miei pensieri in modo rapido e conciso e mi consente persino di rifattorizzare meglio (più avanti). Inoltre, non ho mai dovuto fissare il mio codice per capire cosa ha fatto in seguito, visto che i commenti ci sono.

Inoltre, se si commenta in un secondo momento, è possibile fraintendere ciò che il codice fa in seguito e alterarlo.

+1

Nice. Grazie per aver dedicato del tempo a leggere e rispondere alla domanda (e non solo a discutere "sono commenti buoni?" Per la durata di 100 volte) –

2

Quando è fresco nella tua mente. È improbabile che tu lo comprenda meglio di subito dopo averlo scritto.

In alternativa, quando si torna al codice precedente e si ha difficoltà a capirlo, commentare per annotare ciò che è difficile da capire. Non contare di ricordarlo per la prossima volta; non funziona bene per me.

Detto questo, documenta perché, non come. Se devi documentare come, stai facendo delle cose complicate (nel qual caso devi documentare perché sei) o devi imparare a scrivere codice più leggibile.

+0

+1 Grazie per i primi due paragrafi. –

1

aggiungo commenti dopo il codice è pronto e tutti i test passano, ma prima di inviare il codice. Non aggiungo i commenti prima della codifica, solo perché di solito rifatto il codice un numero di volte nel processo di scrittura, e la mia memoria è abbastanza buona da ricordare cosa sta facendo il codice quando ci sto lavorando. Quindi, documentare il codice prima che il cambiamento sia pronto è uno spreco. Inoltre, può essere visto come una specie di ottimizzazione prematura.

Quindi, dopo aver inviato il codice, aggiungo i commenti solo se qualcuno non riesce a capire cosa sta succedendo e mi sta chiedendo. (Qualcuno - incluso me stesso).

+0

+1 Grazie per questa risposta, si adatta alla domanda come un guanto. –

2

Tendo a scrivere commenti di classe prima di scrivere il codice e commenti di metodo subito dopo aver determinato i parametri e scritto lo scheletro del metodo. Questi vengono aggiornati man mano che evolve il design. Cerco di scegliere nomi di variabili molto chiari e di semplificare il codice per ridurre il numero di commenti a livello di istruzione necessari. Di solito scrivo commenti a livello di istruzione subito dopo aver codificato ciascun corpo del metodo, ma a volte devo prima elaborare un algoritmo nei commenti.

La cosa fondamentale è commentare quando le cose sono fresche nella vostra mente. Passando del tempo a spiegare il tuo codice agli altri, troverai anche più bug e aree in cui il codice necessita di refactoring.

+0

Grazie Jim, soprattutto per leggere e rispondere alla domanda. –

1

Questo mi ha fatto pensare che, se avessi commentato il codice mentre lo scrivevo, i miei commenti potrebbero non aver aiutato un secondo "io" a decifrare il codice.

D'altra parte, potrebbero aver aiutato.

I commenti che sono stati scritti in passato sono spesso più utili ora rispetto ai commenti che non sono stati ancora scritti.

Se si dovesse deliberatamente ritardare la scrittura di commenti, si potrebbe cadere preda di "le mieux est l'ennemi du bien".

+0

Sì. Solo per leggere la domanda, +1. Penso che la citazione di Voltaire si chiami "un uccello in mano vale cento voli", più o meno. Quale è probabilmente la stessa espressione in francese, ora che ci penso. Meglio alcuni commenti mediocri ora di alcuni commenti perfetti dopo. –

0

È stata la mia esperienza che è meglio commentare sempre il codice, anche quando il metodo ei nomi delle variabili sono autoesplicativi. È molto più facile tornare a un pezzo di codice dopo 2 anni e capirlo quando ci sono commenti. I commenti rendono il codice molto più gestibile.

+0

Non so se risponde alla domanda (sbagliato "quando") ma penso che tu abbia ragione. Penso che alcuni commenti aiutano sempre. –

Problemi correlati