Quiero saber de usted cualquier consejo y experiencia de escribir comentarios en su código. ¿Cómo los escribes de la manera más fácil e informativa? ¿Qué hábitos tienes al comentar partes del código? Tal vez algunas recomendaciones exóticas?
Espero que esta pregunta recopile los consejos y recomendaciones más interesantes para comentar, algo útil de lo que todos puedan aprender.
OK, comenzaré
Por lo general, no uso
/* */
comentarios incluso cuando necesito comentar muchas líneas.Ventajas : el código se ve mejor visualmente que cuando se mezcla dicha sintaxis con comentarios de una línea. La mayoría de los IDE tienen la capacidad de comentar el texto seleccionado y generalmente lo hacen con una sintaxis de una línea.
Desventajas : Difícil editar dicho código sin IDE.
Coloque "punto" al final de cualquier comentario terminado.
Por ejemplo:
//Recognize wallpaper style. Here I wanted to add additional details int style = int.Parse(styleValue); //Apply style to image. Apply(style);
Ventajas : Coloque "punto" solo en los comentarios que haya terminado. A veces puede escribir información temporal, por lo que la falta de "punto" le indicará que desea regresar y agregará texto adicional a este comentario.
Alinee el texto en las enumeraciones, parámetros de comentarios, etc.
Por ejemplo:
public enum WallpaperStyle { Fill = 100, //WallpaperStyle = "10"; TileWallpaper = "0". SizeToFit = 60, //WallpaperStyle = "6"; TileWallpaper = "0". Stretch = 20, //WallpaperStyle = "2"; TileWallpaper = "0". Tile = 1, //WallpaperStyle = "0"; TileWallpaper = "1". Center = 0 //WallpaperStyle = "0"; TileWallpaper = "0". };
Ventajas : Simplemente se ve mejor y es visualmente más fácil de encontrar lo que necesita.
Desventajas : pasar tiempo para alinearse y más difícil de editar.
Escriba un texto en el comentario que no pueda obtener analizando el código.
Por ejemplo, comentario estúpido:
//Apply style. Apply(style);
Ventajas : tendrá un código claro y pequeño con solo información útil en los comentarios.
fuente
:3,7 Align //
para alinear comentarios en las líneas 3-7.Respuestas:
Algunas de las declaraciones a continuación son bastante personales, aunque con cierta justificación, y están destinadas a ser de esta manera.
Tipos de comentarios
Para la versión breve ... uso comentarios para:
Lea a continuación los detalles y las razones (posiblemente oscuras).
Comentarios finales
Dependiendo del idioma, ya sea utilizando comentarios de una sola línea o comentarios de varias líneas. ¿Por qué depende? Es solo un problema de estandarización. Cuando escribo código C, prefiero el código ANSI C89 antiguo de forma predeterminada, por lo que prefiero tenerlo siempre
/* comments */
.Por lo tanto, tendría esto en C la mayor parte del tiempo y, a veces (depende del estilo de la base de código) para lenguajes con una sintaxis tipo C:
Emacs es agradable y hace eso por mí
M-;
.Si el lenguaje admite comentarios de una sola línea y no está basado en C, estaré más obligado a usar los comentarios de una sola línea. De lo contrario, me temo que ahora he tomado el hábito. Lo cual no es necesariamente malo, ya que me obliga a ser conciso.
Comentarios multilínea
No estoy de acuerdo con tu precepto usando comentarios de una sola línea para que esto sea más atractivo visualmente. Yo uso esto:
O esto (pero ya no lo hago tan a menudo, excepto en una base de código personal o principalmente para avisos de derechos de autor; esto es histórico para mí y proviene de mi formación académica. Desafortunadamente, la mayoría de los IDE lo arruinan cuando se usa el formateo automático) :
Si fuera necesario, comentaría en línea usando lo que mencioné anteriormente para los comentarios finales, si tiene sentido usarlo en una posición final. En un caso de devolución muy especial, por ejemplo, o para documentar
switch
lascase
declaraciones de un (raro, no uso switch a menudo), o cuando documente ramas en unif ... else
flujo de control. Si ese no es uno de estos, generalmente un bloque de comentarios fuera del alcance que describe los pasos de la función / método / bloque tiene más sentido para mí.Los uso de manera excepcional, excepto si se codifica en un idioma sin soporte para comentarios de documentación (ver más abajo); en cuyo caso se vuelven más frecuentes. Pero en el caso general, realmente es solo para documentar cosas que están destinadas a otros desarrolladores y son comentarios internos que realmente deben destacarse. Por ejemplo, para documentar un bloque vacío obligatorio como un bloque "forzado"
catch
:Lo cual ya es feo para mí, pero lo toleraría en algunas circunstancias.
Comentarios de documentación
Javadoc y col.
Por lo general, los uso en métodos y clases para documentar versiones que introducen una característica (o la cambian), especialmente si es para una API pública, y para proporcionar algunos ejemplos (con casos claros de entrada y salida, y casos especiales). Aunque en algunos casos un caso unitario podría ser mejor para documentarlos, las pruebas unitarias no son necesariamente legibles por humanos (no importa qué cosa DSL use).
Me molestan un poco para documentar los campos / propiedades, ya que prefiero los comentarios finales para esto y no todo el marco de generación de documentación admite comentarios de documentación final. Doxygen sí, por ejemplo, pero JavaDoc no, lo que significa que necesita un comentario principal para todos sus campos. Sin embargo, puedo sobrevivir a eso, ya que las líneas Java son relativamente largas de todos modos la mayor parte del tiempo, por lo que un comentario final me asustaría igualmente al extender la línea más allá de mi umbral de tolerancia. Si Javadoc alguna vez considerara mejorar eso, estaría mucho más feliz.
Código comentado
Utilizo una sola línea solo por una razón, en lenguajes tipo C (excepto si compilo para C estricto, donde realmente no los uso): comentar cosas mientras codifico. La mayoría de los IDE tendrán que alternar para comentarios de una sola línea (alineados en sangría o en la columna 0), y eso se ajusta a ese caso de uso para mí. El uso de la alternancia para comentarios de varias líneas (o la selección en el medio de las líneas, para algunos IDE) hará que sea más difícil cambiar fácilmente entre comentarios / comentarios.
Pero como estoy en contra del código comentado en el SCM, eso suele ser muy breve porque eliminaré los fragmentos comentados antes de comprometerme. (Lea mi respuesta a esta pregunta sobre "comentarios en línea editados y SCM" )
Estilos de comentario
Normalmente tiendo a escribir:
Una nota sobre programación literaria
Es posible que desee interesarse en la programación literaria , como se presenta en este documento por Donald Knuth .
Como nota al margen y ejemplo: el marco JavaScript underscore.js , a pesar del incumplimiento de mi estilo de comentario, es un buen ejemplo de una base de código bien documentada y una fuente anotada bien formada , aunque tal vez no sea la mejor para usar como una referencia de API).
Estas son convenciones personales . Sí, podría ser raro (y tú también podrías serlo). Está bien, siempre y cuando cumpla y cumpla con las convenciones de código de su equipo cuando trabaje con sus compañeros, o no ataque radicalmente sus preferencias y conviva agradablemente. Es parte de su estilo, y debe encontrar la línea fina entre desarrollar un estilo de codificación que lo defina como un codificador (o como seguidor de una escuela de pensamiento u organización con la que tiene una conexión) y respetar la convención de un grupo para mantener la coherencia. .
fuente
Cuando iba a la universidad siempre me enseñaron a comentar cada línea de código y cada encabezado de método. Fue tocado / adoctrinado hasta el punto de que lo hiciste sin dudarlo. Habiendo sido parte de varios equipos de desarrollo ágil en diferentes compañías, puedo decir que puedo escribir un comentario una vez en una luna azul.
La razón de esto es doble, en primer lugar, ya no deberíamos escribir largos métodos monolíticos que hagan 101 cosas diferentes, la clase, el método y los nombres de las variables deberían autodocumentarse. Tome el siguiente método de inicio de sesión como ejemplo.
Esto puede repetirse con algo que es mucho más legible y quizás reutilizable:
Puede ver claramente desde el método de inicio de sesión lo que está sucediendo. Puede ver esto como un trabajo extra, pero sus métodos son pequeños y solo tienen un trabajo. Además, los nombres de los métodos son descriptivos, por lo que no es necesario escribir ningún comentario en el encabezado del método. Si termina con demasiados métodos, esto es una indicación de que los métodos relacionados se deben refactorizar en otro objeto, como un Servicio de autenticación de usuario, recuerde que un objeto solo debe tener un trabajo.
En segundo lugar, cada código que escriba, incluidos los comentarios, debe mantenerse, cuantos más comentarios tenga, más debe mantener. Si cambia el nombre de una clase o una variable, obtendrá un error de compilación, pero si cambia la forma en que funciona una sección de código o la elimina y no actualiza ningún comentario relacionado, no habrá ningún error de compilación y los comentarios se quedarán dando vueltas causando confusión .
Si está escribiendo una API, entonces creo que las interfaces, clases y enumeraciones públicas deben tener comentarios de encabezado bien escritos para la documentación.
fuente
Concéntrese menos en el formato y más en el contenido. Por ejemplo, los comentarios en tu ejemplo no me dicen nada nuevo. Son peores que inútiles, ya que restan la lectura del código, y comentarios como estos son, en el mejor de los casos, una vaga referencia a lo que el programador original pensó que estaba haciendo en el momento en que lo escribió. Puedo ver en el ejemplo de código que estás aplicando un estilo "apply (Style)", puedo leer la fuente. No puedo leer tu mente, por qué lo haces es lo que el comentario debería decirme. por ejemplo, en lugar de
//Apply style.
Apply(style);
debiera ser
// Unlike the others, this image needs to be drawn in the user-requested style apply(style);
La mayoría de nosotros trabajamos en equipos con el código existente, formateamos de la misma manera que lo hace el resto del equipo, como ya se está haciendo. Consistencia de mucho más importante que bonita.
fuente
En la medida de lo posible, escriba su código de manera que los comentarios sean completamente extraños. Solo agregue comentarios cuando el código no se pueda escribir de tal manera que haga obvio un concepto importante.
fuente
Mi preferencia es mantenerlo realmente simple. Evito todo tipo de formato elegante. La razón principal de esto es que creo que el código fuente debería ser cómodamente editable incluso con el editor de texto más simple. Tampoco nunca envuelvo los párrafos de texto, sino que dejo que el editor realice un ajuste suave (sin agregar nuevas líneas).
fuente
A menudo veo comentarios como ese, y algunas herramientas lo generan automáticamente de esa manera:
Dos líneas menos:
Los IDE y los editores, marginalmente por encima del nivel del bloc de notas, pueden detectar comentarios e imprimirlos en un color diferente. No es necesario decorar el comienzo de la línea con asteriscos.
Incluso ahorra algunos bytes, si usa una pestaña para sangrar.
Si no utiliza un editor sofisticado, que muestra el comentario en un tono gris, la gran cantidad de asteriscos funcionará como un énfasis y atraerá su atención, que es lo opuesto a lo correcto: quedarse atrás.
fuente
Aquí hay un "antipatrón" que he encontrado en todo el código de mi trabajo: el uso de comentarios como un "registro de cambios"; Para eso sirve el registro en su sistema de control de versiones. El código está lleno de cosas como:
y generalmente incluye el código antiguo que se ha comentado (de nuevo, ese es el punto de un sistema VCS, por lo que no es necesario que esté en el código después de escribir el nuevo código). También hay que evitar comentarios repetidos como "¿Por qué necesitamos esto?" o peor aún, "Esto probablemente debería renombrarse" (porque hay herramientas sofisticadas para renombrar, por lo que en el tiempo que le tomó escribir ese comentario, podría haber cambiado el nombre de la cosa). Nuevamente, trato con ambos comentarios de forma regular, en la línea de:
fuente
fuente
Los lectores de códigos generalmente intentan responder tres preguntas:
Todo lo demás debe expresarse en el código. Al igual que escribir en prosa, este es un arte y requiere mucha práctica. La única forma de saber si su código es comprensible es hacer que alguien más lo lea. Cuando no entiendan algo, no lo expliquen verbalmente. Mejora el código. Agregue comentarios como último recurso.
Si veo "doble longitud", preguntaré "¿Cuál es la unidad de medida?" No añadas un comentario. Cambiar el nombre de la variable. Si veo un bloque de código y digo "¿qué hace esto?", No agregue un comentario. Extraer una función con un nombre significativo. Si no puede extraer una función porque necesitaría 17 argumentos, refactorice el código.
fuente