Aggiornare
La mia risposta tra virgolette per enfasi:
Sono convinto che la risposta che afferma che i commenti non dovrebbero essere affrontati negli standard di codifica e che quindi elenchi una serie di domande difensive per combatterla, è l'unica risposta corretta.
Il problema qui è che uno standard di codifica è proprio questo, uno standard . Le idee estremamente soggettive non dovrebbero rientrare in uno standard di codifica . Può essere presente in una guida alle best practice, ma tale guida non può essere utilizzata contro uno sviluppatore durante la revisione del codice. A mio avviso personale, uno standard di codifica dovrebbe essere il più vicino possibile al più automatizzato. C'è così tanto tempo sprecato in Code Reviews a discutere di nomi, spaziature, tabulazioni, parentesi, commenti, ecc. Ecc. Quando TUTTO può essere automatizzato. Anche la risposta su tables
e chairs
può essere automatizzata. LINT'er consente dizionari, controlli di capitalizzazione per concetto (variabile, funzione, metodo, classe, ecc.).
Anche il controllo JavaDoc può essere implementato da un robot LINT'er prima che una richiesta pull sia accettata. Molti progetti Open Source fanno esattamente questa cosa. Invia la tua richiesta pull, il codice viene creato con un file Travis-CI, inclusa l'analisi statica, e deve superare tutti gli standard di codifica che possono essere espressi in modo obiettivo. Nessun essere umano parla di "farlo in modo errato" o di non "fornire valore" con un commento o il modo sbagliato di nominare le variabili, ecc. Quelle discussioni non danno alcun valore e sono meglio lasciare a un robot di terze parti che può prendere il peso della nostra codifica emotiva.
Per rispondere effettivamente alla domanda dovremmo rivolgerci a come scrivere uno standard che si rivolge a come rispondere alla seguente domanda: questo commento ha fornito valore? Uno standard di codifica non può dettare il "valore" di un commento. Perciò diventa necessario che un essere umano passi attraverso quella lista di controllo. La semplice menzione di commenti in uno standard di codifica crea una lista di controllo che il poster originale vuole evitare.
Ecco perché i commenti di solito non vengono elaborati dal compilatore e rimossi. Il loro valore non può essere determinato. Il commento in questione è prezioso; si o no?. Rispondere a questa domanda è NP-difficile. Solo gli umani hanno la possibilità di rispondere correttamente, e anche allora può essere data risposta solo nel momento in cui viene letto, dalla persona che lo sta leggendo; dove il valore di quel commento è influenzato dal tempo, dalla sua vita domestica, dall'ultimo incontro a cui hanno appena partecipato e che non si è concluso bene, dall'ora del giorno, dalla quantità di caffè che hanno avuto. Confido che l'immagine stia diventando più chiara.
Come può mai essere espresso correttamente in qualsiasi standard? Uno standard non è utile a meno che non possa essere applicato in modo coerente ed equo, laddove la correttezza riguarda più l'oggettività non emotiva.
Contesto che uno standard di codifica debba rimanere il più obiettivo possibile. Il modo in cui le variabili sono denominate obiettivo IS. Possono essere facilmente verificati in un dizionario per la corretta ortografia, struttura grammaticale e involucro. Qualunque cosa oltre a ciò è una "partita pissing" che viene vinta dalla persona con più potere o "battendo le sopracciglia". Qualcosa che, personalmente, faccio fatica a NON fare.
Quando commento, commento sempre parlando con il mio io futuro in terza persona. Se torno a questo codice tra 5 anni, cosa dovrei sapere? Cosa sarebbe utile, cosa sarebbe confuso e cosa non sarebbe aggiornato con il codice? Esiste una differenza tra il codice di documentazione per generare un'API pubblica ricercabile e il codice di commento che fornisce valore a una terza parte sconosciuta, anche se quella terza parte è te stesso.
Ecco una buona cartina di tornasole. Se tu fossi l'UNICO sul progetto. Sapevi che saresti stato l'unico sul progetto. Quale sarebbe il tuo standard di codifica? Vorresti che il tuo codice fosse pulito, autoesplicativo e comprensibile a te stesso in futuro. Avresti una revisione del codice con te stesso sul perché non hai inserito un commento su ogni riga? Revisioneresti ogni singolo commento che hai creato sui 100 file che hai registrato? Se no, allora perché forzare gli altri?
Qualcosa che credo manchi in queste discussioni è che Future You è anche uno sviluppatore di questo progetto. Quando chiedi del valore, domani sei anche una persona che può derivare valore dal commento. Quindi la dimensione della squadra, secondo me non ha importanza. L'esperienza di squadra non ha importanza, cambia troppo spesso.
Nessuna quantità di codice di commento che esamina questo impedisce a un pacemaker di schiantarsi e uccidere un paziente. Quando parli di un commento che influisce sul codice, ora stai parlando del codice e non del commento. Se tutto ciò che serve è un commento mancante per uccidere qualcuno, c'è qualcos'altro che puzza nel processo.
La soluzione a questo tipo di rigoroso metodo di codifica è già stata fornita come metodologia per la scrittura del software stesso. E non ha nulla a che fare con i commenti. Il problema con i commenti è che NON hanno alcun impatto sul modo in cui funziona il prodotto. I migliori commenti al mondo non possono impedire il crash del software se incorporato in un pacemaker. O quando si misurano i segnali elettrici con un elettrocardiogramma portatile.
Abbiamo due tipi di commenti:
Commenti leggibili dalla macchina
Stili di commento come Javadoc, JSDoc, Doxygen, ecc. Sono tutti modi per commentare l'interfaccia pubblica fornita da un set di codice. Tale interfaccia può essere utilizzata solo da un altro sviluppatore (codice proprietario per un team di due persone), un numero sconosciuto di sviluppatori (ad esempio JMS) o per un intero reparto. Questo codice può essere letto da un processo automatizzato che produce quindi un modo diverso di leggere quei commenti, ala HTML, PDF e simili.
Questo tipo di commento è facile da creare uno standard per. Diventa un processo oggettivo per garantire che ogni metodo, funzione, classe invocabile pubblicamente contenga i commenti richiesti. Intestazioni, parametri, descrizione et. EL. Questo per garantire che sia facile per un altro team trovare e utilizzare il codice.
Sto facendo qualcosa che sembra pazzo, ma in realtà non lo è
Questi commenti sono qui per aiutare gli altri a capire PERCHÉ questo codice è stato scritto in un certo modo. Forse c'è un errore numerico nei processori su cui il codice è in esecuzione e viene sempre arrotondato, ma gli sviluppatori in genere gestiscono il codice che arrotonda. Quindi, commentiamo per garantire che uno sviluppatore che tocchi il codice capisca perché il contesto attuale stia facendo qualcosa sembrerebbe normalmente irragionevole, ma in realtà è stato scritto apposta in questo modo.
Questo tipo di codice è ciò che causa così tanti problemi. In genere diventa non commentato e successivamente viene trovato da un nuovo sviluppatore e "risolto". Rompendo così tutto. Anche allora, i commenti sono lì solo per spiegare il PERCHE 'per non impedire effettivamente che qualcosa si rompa.
Non è possibile fare affidamento sui commenti
I commenti sono in definitiva inutili e non ci si può fidare. I commenti normalmente non cambiano il modo in cui i programmi vengono eseguiti. E se lo fanno, allora il tuo processo sta causando più problemi, quindi dovrebbe. I commenti sono ripensamenti e non possono essere altro che. Il codice è tutto ciò che conta in quanto è tutto ciò che viene elaborato dal computer.
Questo può sembrare stupido, ma abbi pazienza. Quale di queste due linee conta davvero?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
In questo esempio, tutto ciò che conta è che non abbiamo idea di cosa sia 'n', non c'è alcun controllo per n essendo 0 E anche se non ci fosse, nulla impedisce a uno sviluppatore di mettere n = 0
DOPO il controllo per 0. Quindi, il commento è inutile e nulla di automatizzato potrà mai capirlo. Nessuno standard può capirlo. Il commento, sebbene carino (per alcuni) non influisce sul risultato del prodotto.
Test Driven Development
Che cosa ha un esito sul prodotto? Le industrie in cui il codice in fase di scrittura possono letteralmente salvare o uccidere qualcuno devono essere rigorosamente controllate. Questo viene fatto attraverso revisioni del codice, revisioni del codice, test, test, revisioni del codice, test unitari, test di integrazione, prove, stadiazione, mesi di test, revisioni del codice e prove individuali, stadiazione, revisioni del codice, test e poi forse finalmente andare in produzione. I commenti non hanno nulla a che fare con questo.
Preferirei un codice che NON avesse commenti, una specifica, prove unitarie che verificassero le specifiche, studi sui risultati dell'esecuzione del codice sul dispositivo di produzione, quindi codice ben documentato che non era mai stato testato, né che avesse nulla per confrontare il codice contro.
La documentazione è buona quando stai cercando di capire PERCHÉ qualcuno ha fatto qualcosa in un certo modo, tuttavia, negli anni ho scoperto che la documentazione viene in genere utilizzata per spiegare perché è stato fatto qualcosa di "intelligente", quando in realtà non è stato necessario essere scritto in quel modo.
Conclusione
Se lavori in un'azienda che RICHIEDE che ogni riga sia commentata, GARANTISCO che almeno due ingegneri del software sul progetto hanno già scritto un programma di auto-documento in Perl, Lisp o Python che determina l'idea generale di ciò che la linea sta facendo , quindi aggiunge un commento sopra quella riga. Poiché ciò è possibile, significa che i commenti sono inutili. Trova gli ingegneri che hanno scritto questi script per documentare automaticamente il codice e usali come prova del perché il "Comment on Every Line" sta sprecando tempo, non fornendo alcun valore e potenzialmente danneggiando.
A parte, stavo aiutando un caro amico con un incarico di programmazione. Il suo insegnante aveva stabilito che ogni riga doveva essere documentata. Quindi posso vedere da dove verrebbe questo processo di pensiero. Chiediti semplicemente, cosa stai cercando di fare ed è questa la cosa giusta? Quindi chiediti; Esiste un modo per "giocare" al sistema con questo processo? Se c'è, allora sta davvero aggiungendo qualche valore? Non si possono scrivere automaticamente unit test che testano quel codice soddisfa una determinata specifica e, se possibile, non sarebbe una brutta cosa.
Se un dispositivo deve funzionare in determinate condizioni perché si troverà all'interno di un essere umano, l'unico modo per assicurarsi che non li uccida è anni di test, peer review, prove e quindi MAI MAI PIÙ cambiare di nuovo il codice. Questo è il motivo per cui la NASA utilizza / utilizzava ancora hardware e software così vecchi. Quando si tratta di vita o morte, non basta "apportare un piccolo cambiamento e controllarlo".
I commenti non hanno nulla a che fare con il salvataggio di vite. I commenti sono per gli umani, gli umani commettono errori, anche quando scrivono commenti. Non fidarti degli umani. Ergo, non fidarti dei commenti. I commenti non sono la tua soluzione.