Ecco una domanda che mi chiedo quando penso se aggiungere un commento in una sezione di codice: cosa posso comunicare per aiutare la persona successiva a comprendere meglio l' intento generale del codice, in modo che possano aggiornare, correggere o estenderlo più velocemente e in modo più affidabile?
A volte la risposta corretta a questa domanda è che non c'è molto che puoi aggiungere in quel punto nel codice, perché hai già selezionato nomi e convenzioni che rendono l'intento il più ovvio possibile. Ciò significa che hai scritto un solido codice di auto-documentazione e che l'inserimento di un commento probabilmente toglierebbe di più di quanto aiuterebbe. (Si noti che i commenti ridondanti possono effettivamente danneggiare l'affidabilità del codice nel tempo rallentando la perdita di sincronizzazione con il codice reale nel tempo e rendendo così più difficile decifrare l'intento reale.
Tuttavia, in quasi tutti i programmi e in qualsiasi linguaggio di programmazione, incontrerai punti in cui alcuni concetti e decisioni critici presi dal programmatore originale - da te - non saranno più evidenti nel codice. Questo è praticamente inevitabile perché un buon programmatore programma sempre per il futuro, cioè non solo per far funzionare il programma una volta, ma per fare tutte le sue molte correzioni e versioni future, estensioni, modifiche e porte e chissà cosa fare funziona anche correttamente. Quest'ultima serie di obiettivi è molto più difficile e richiede molto più pensiero per fare bene. E 'anche molto difficile da esprimere bene nella maggior parte dei linguaggi di programmazione, che sono più concentrati sulla funzionalità - che è, a dire che cosa fa questo versione del programma deve fare, in questo momento, al fine di renderlo soddisfacente.
Ecco un semplice esempio di cosa intendo. Nella maggior parte delle lingue, una rapida ricerca in linea di una piccola struttura di dati avrà una complessità sufficiente che qualcuno che la guarderà per la prima volta probabilmente non riconoscerà immediatamente di cosa si tratta. Questa è l'occasione per un buon commento, perché è possibile aggiungere qualcosa circa la volontà del codice che un lettore in seguito probabilmente apprezzeranno immediatamente come utile per decifrare i dettagli.
Al contrario, in lingue come il linguaggio basato sulla logica Prolog, esprimere la ricerca di un piccolo elenco può essere così incredibilmente banale e succinto che qualsiasi commento che potresti aggiungere sarebbe solo rumore. Quindi, un buon commento dipende necessariamente dal contesto. Ciò include fattori come i punti di forza della lingua che stai utilizzando e il contesto generale del programma.
La linea di fondo è questa: pensa al futuro. Chiediti cosa è importante e ovvio per te su come il programma dovrebbe essere compreso e modificato in futuro. [1]
Per quelle parti del codice che sono veramente auto-documentate, i commenti aggiungono solo rumore e aumentano il problema di coerenza per le versioni future. Quindi non aggiungerli lì.
Ma per quelle parti del tuo codice in cui hai preso una decisione critica da diverse opzioni o in cui il codice stesso è abbastanza complesso da rendere oscuro il suo scopo, ti preghiamo di aggiungere le tue conoscenze speciali sotto forma di un commento. Un buon commento in questo caso è quello che fa sapere ad un futuro programmatore cosa deve essere mantenuto lo stesso - questo è il concetto di un'affermazione invariante, per inciso - e cosa può cambiare.
[1] Questo va oltre il problema dei commenti, ma vale la pena sollevare: se scopri di avere un'idea molto chiara di come il tuo codice potrebbe cambiare in futuro, dovresti probabilmente pensare oltre a fare un commento e incorporare quei parametri all'interno del codice stesso, poiché sarà quasi sempre un modo più affidabile per garantire l'affidabilità delle versioni future del codice rispetto al tentativo di utilizzare i commenti per guidare una persona futura sconosciuta nella giusta direzione. Allo stesso tempo, vuoi anche evitare un'eccessiva generalizzazione, dal momento che gli umani sono notoriamente cattivi nel predire il futuro, e questo include il futuro dei cambi di programma. Quindi, prova a definire e catturare dimensioni ragionevoli e comprovate del futuro a tutti i livelli di progettazione del programma, ma non