La cita de Robert C. Martin está fuera de contexto. Aquí está la cita con un poco más de contexto:
Nada puede ser tan útil como un comentario bien colocado. Nada puede abarrotar un módulo más que los frívolos comentarios dogmáticos. Nada puede ser tan perjudicial como un viejo comentario grosero que propaga mentiras y desinformación.
Los comentarios no son como la Lista de Schindler. No son "puro bien". De hecho, los comentarios son, en el mejor de los casos, un mal necesario. Si nuestros lenguajes de programación fueran lo suficientemente expresivos, o si tuviéramos el talento de utilizar sutilmente esos lenguajes para expresar nuestra intención, no necesitaríamos muchos comentarios, tal vez en absoluto.
El uso adecuado de los comentarios es para compensar nuestra falta de expresión en código. Tenga en cuenta que usé la palabra fracaso. Lo dije en serio. Los comentarios son siempre fracasos. Debemos tenerlos porque no siempre podemos descubrir cómo expresarnos sin ellos, pero su uso no es motivo de celebración.
Entonces, cuando se encuentre en una posición en la que necesite escribir un comentario, piénselo bien y vea si no hay alguna forma de cambiar las tornas y expresarse en código. Cada vez que te expreses en código, debes darte palmaditas en la espalda. Cada vez que escribe un comentario, debe hacer una mueca y sentir el fracaso de su capacidad de expresión.
(Copiado de aquí , pero la cita original es de Clean Code: A Handbook of Agile Software Craftsmanship )
La forma en que esta cita se reduce a "Los comentarios son siempre fracasos" es un buen ejemplo de cómo algunas personas tomarán una cita sensata fuera de contexto y la convertirán en un estúpido dogma.
Documentación de la API (como javadoc) se supone que documentar la API para que el usuario pueda utilizarlo sin tener que leer el código fuente . Entonces, en este caso, la documentación debe explicar lo que hace el método. Ahora puede argumentar que "Recupera un producto por su id" es redundante porque ya está indicado por el nombre del método, pero la información que null
puede devolverse es definitivamente importante para documentar, ya que esto no es obvio de ninguna manera.
Si desea evitar la necesidad del comentario, debe eliminar el problema subyacente (que es el uso null
como un valor de retorno válido), haciendo que la API sea más explícita. Por ejemplo, podría devolver algún tipo de Option<Product>
tipo, por lo que la firma del tipo en sí comunica claramente lo que se devolverá en caso de que no se encuentre el producto.
Pero, en cualquier caso, no es realista documentar una API completamente solo a través de nombres de métodos y firmas de tipo. Use doc-comments para cualquier información adicional no obvia que el usuario debe saber. Tomemos como ejemplo la documentación de la API de DateTime.AddMonths()
BCL:
El método AddMonths calcula el mes y año resultantes, teniendo en cuenta los años bisiestos y el número de días en un mes, luego ajusta la parte del día del objeto DateTime resultante. Si el día resultante no es un día válido en el mes resultante, se utiliza el último día válido del mes resultante. Por ejemplo, 31 de marzo + 1 mes = 30 de abril. La parte de la hora del día del objeto DateTime resultante permanece igual que esta instancia.
¡No hay forma de que puedas expresar esto usando solo el nombre y la firma del método! Por supuesto, la documentación de su clase puede no requerir este nivel de detalle, es solo un ejemplo.
Los comentarios en línea tampoco son malos.
Los malos comentarios son malos. Por ejemplo, comentarios que solo explican lo que se puede ver trivialmente del código, el ejemplo clásico es:
// increment x by one
x++;
Los comentarios que explican algo que podría aclararse cambiando el nombre de una variable o método o reestructurando el código, es un olor a código:
// data1 is the collection of tasks which failed during execution
var data1 = getData1();
Este es el tipo de comentarios que Martin critica. El comentario es un síntoma de una falla al escribir código claro, en este caso para usar nombres que se explican por sí mismos para variables y métodos. Por supuesto, el comentario en sí no es el problema, el problema es que necesitamos el comentario para comprender el código.
Pero los comentarios deben usarse para explicar todo lo que no es obvio en el código, por ejemplo, por qué el código está escrito de cierta manera no obvia:
// need to reset foo before calling bar due to a bug in the foo component.
foo.reset()
foo.bar();
Los comentarios que explican lo que hace una pieza de código demasiado complicada también es un olor, pero la solución no es prohibir los comentarios, ¡la solución es arreglar el código! En la palabra real, el código complicado ocurre (con suerte solo temporalmente hasta un refactorizador) pero ningún desarrollador ordinario escribe código limpio perfecto la primera vez. Cuando ocurre un código complicado, es mucho mejor escribir un comentario explicando lo que hace que no escribir un comentario. Este comentario también facilitará la refactorización posterior.
A veces el código es inevitablemente complejo. Puede ser un algoritmo complicado, o puede ser un código que sacrifica la claridad por razones de rendimiento. De nuevo los comentarios son necesarios.