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:
- comentarios finales que explican los campos en las estructuras de datos (aparte de eso, realmente no uso comentarios de una sola línea)
- comentarios de varias líneas excepcionales u orientados a fines sobre bloques
- documentación pública de usuario y / o desarrollador generada desde la fuente
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:
typedef struct STRUCT_NAME {
int fieldA; /* aligned trailing comment */
int fieldBWithLongerName; /* aligned trailing comment */
} TYPE_NAME;
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:
/*
* this is a multi-line comment, which needs to be used
* for explanations, and preferably be OUTSIDE the a
* function's or class' and provide information to developers
* that would not belong to a generated API documentation.
*/
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) :
/*
** this is another multi-line comment, which needs to be used
** for explanations, and preferably be OUTSIDE the a
** function's or class' and provide information to developers
** that would not belong to a generated API documentation.
*/
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
las case
declaraciones de un (raro, no uso switch a menudo), o cuando documente ramas en un if ... 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
:
try {
/* you'd have real code here, not this comment */
} catch (AwaitedException e) {
/*
* Nothing to do here. We default to a previously set value.
*/
}
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:
- completar oraciones con la gramática correcta (incluida la puntuación) para comentarios de documentación, ya que se supone que deben leerse más adelante en un documento de API o incluso como parte de un manual generado.
- bien formateado pero más laxo en la puntuación / mayúsculas para bloques de comentarios de líneas múltiples
- bloques finales sin puntuación (debido al espacio y generalmente porque el comentario es breve, que se lee más como una declaración entre paréntesis)
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 .
El paradigma de la programación alfabetizada representa [...] un alejamiento de escribir programas de la manera y el orden impuestos por la computadora, y en cambio permite a los programadores desarrollar programas en el orden exigido por la lógica y el flujo de sus pensamientos. 2 Los programas literarios se escriben como una exposición ininterrumpida de la lógica en un lenguaje humano ordinario, muy parecido al texto de un ensayo [...].
Las herramientas de programación alfabetizadas se utilizan para obtener dos representaciones de un archivo fuente alfabetizado: una adecuada para su posterior compilación o ejecución por una computadora, el código "enredado" y otra para ver como documentación formateada, que se dice que está "tejida" fuente alfabetizada.
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. .
:3,7 Align //
para alinear comentarios en las líneas 3-7.