¿Por qué son /// los bloques de comentarios importantes?

49

Alguien dijo una vez que deberíamos prefijar todos nuestros métodos con los /// <summary>bloques de comentarios (C #) pero no explicó por qué.

Comencé a usarlos y descubrí que me molestaban bastante, así que dejé de usarlos excepto para las bibliotecas y los métodos estáticos. Son voluminosos y siempre me olvido de actualizarlos.

¿Hay alguna buena razón para usar /// <summary>bloques de comentarios en su código?

Normalmente uso //comentarios todo el tiempo, son solo los /// <summary>bloques de los que me preguntaba.

Rachel
fuente
1
No estaba seguro de si estos bloques de comentarios eran preferencias personales o estándares recomendados
Rachel
1
Creo que SO también.
Ryan Hayes
30
Creo que este es exactamente el tipo de pregunta que pertenece aquí. Existe una buena posibilidad de que esto se cierre en stackoverflow como subjetivo.
Paddyslacker
Use bloques <summary> si desea generar documentación. Esto tendría sentido si está haciendo una API para que otros la usen. Hacer esto para cada método es excesivo y disminuye su flexibilidad.
Macneil

Respuestas:

91

Úsalos tanto como sea posible.

Sí, esos son comentarios especiales que se convierten en la documentación del método. El contenido de <summary>las etiquetas de parámetros, etc. que se generan se muestra en intellisense cuando usted u otra persona se está preparando para llamar a su método. Esencialmente, pueden ver toda la documentación de su método o clase sin tener que ir al archivo en sí para averiguar qué hace (o simplemente intentar leer la firma del método y esperar lo mejor).

Ryan Hayes
fuente
22
+1 Absolutamente úsalas. Se sorprendería de lo útil que es tenerlos si alguna vez reutiliza sus componentes y tiene toda esa excelente documentación disponible en intellisense.
Walter
44
Además, si está utilizando Visual Studio y comienza una línea con /// justo antes de una declaración de clase, método o campo, VS generará la estructura de documentación XML para usted; solo tiene que completarla. Estoy de acuerdo en que toma mucho espacio de su pantalla, pero diría que es un compromiso digno. Además, F # tiene un mejor soporte para ello (por ejemplo, no tiene que usar <summary> y </summary> ya que se 'supone').
ShdNx
77
Debido a que esta respuesta ya es la mejor opción, simplemente agregaré mi comentario: cuando descubrí que el resumen se usa para intellisense, y mis proyectos crecieron a su tamaño actual, me alegré mucho de haber encontrado esta característica. Recordar para qué son mis métodos y clases se convirtió en un gran desafío, y documentar el código a través de este mecanismo simplificó enormemente las cosas, lo que me permitió centrarme en el nuevo código y la reutilización en lugar de tratar de recordar lo que se hizo hace meses.
JYelton
3
Solo una cosa para agregar, estos comentarios no se compilan en el dll, debe entregar el archivo xml asociado con su dll.
Benjol
Son útiles, pero hacen que la clase actual sea muy ilegible. Desearía que hubiera otra forma que no atestara el código.
Jeroen van Langen
17

Sí, úsalas absolutamente para cualquier cosa que quieras conservar o que puedas compartir.

Además, úselos junto con Sandcastle y el Sandcastle Help File Builder , que toma la salida XML y la convierte en una hermosa documentación de estilo MSDN.

El último lugar donde trabajé reconstruimos la documentación todas las noches y la alojamos como una página de inicio interna. Las iniciales de la compañía eran MF, por lo que era MFDN;)

Normalmente, solo produzco un archivo .chm, que se comparte fácilmente.

¡Te sorprenderá lo adicto que eres a documentar todo una vez que comiences a verlo en formato MSDN!

Tom Morgan
fuente
1
El enlace al blog parece estar muerto (última publicación hace 5 años con html roto en toda la página), y la ubicación del proyecto se ha movido. ¿Tiene un enlace actualizado para Sandcastle?
12

Si su estándar de codificación exige que utilice dichos comentarios (y un estándar de codificación para una API o un marco puede exigir eso), entonces no tiene otra opción, debe utilizar dichos comentarios.

De lo contrario, considere seriamente no usar tales comentarios. Puede evitarlos en la mayoría de los casos cambiando su código de esta manera:

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool SecurityCheck( User user ) {

    }

a

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool IsAuthorizedToAccessResource( User user ) {

    }

a

    public bool IsAuthorizedToAccessResource( User user ) {

    }
azheglov
fuente
11
Si bien estoy de acuerdo en que el código debe autodocumentarse con la mayor frecuencia posible, sugiero usar este tipo de comentarios siempre que sea posible (y con mayor frecuencia que los // comentarios genéricos). Los comentarios /// XML están diseñados para funcionar con IntelliSense, lo que puede facilitar el desarrollo meses después cuando intentas implementar alguna biblioteca que creaste y no recuerdas cómo funciona por más tiempo.
Matt DiTrolio
2
Y creo que no solo desde una perspectiva Intellisense, sino también desde una perspectiva automática de generación de documentación, los comentarios xml son útiles. Pero como con todos los comentarios, esto solo tiene sentido si los comentarios en sí son útiles y se agregan al código auto documentado.
Vaibhav
55
Estoy de acuerdo en que cuando escribes clases públicas de una API o un marco, el estándar de codificación debe exigir que pongas comentarios en el código de modo que IntelliSense y las herramientas de documentación puedan conectarse. Pero eso no es todo código. Aparte de esa preocupación, el enfoque que estoy recomendando aquí es, cuando intente hacer que su código sea más limpio y claro, concéntrese en el código en sí, no en el comentario que describe el código.
azheglov
3
@JYelton: tu comentario tergiversa mi respuesta. Implicaba nombres más descriptivos, pero no necesariamente mucho más detallados, ciertamente no un identificador de 60 caracteres para una función pública frecuentemente llamada. Además, tiene lo que parece ser una función altamente especializada, pero requiere un tipo de datos muy general (XmlDocument): ese es un olor a código. Luego, su identificador de 60 caracteres describe "cómo" y no "qué", de un método público. Ese es otro olor. El mensaje principal es: piense primero en el código, no en el comentario.
azheglov
2
@JYelton El problema con el nombre de su método no es que sea descriptivo, sino que describe al menos 2 operaciones separadas y, por lo tanto, debe refactorizarse en al menos 2 métodos independientes.
Neal
4

Su clase, método y nombre de propiedad deben ser evidentes, por lo que si los necesita, probablemente sea un olor.

Sin embargo, recomendaría usarlos en cualquier clase pública, métodos y propiedades en una API, biblioteca, etc. Por lo menos, generarán los documentos para ayudar a cualquier desarrollador que lo use y evitarán que tenga para escribirlos

Pero de todos modos, lo corta, lo mantiene o lo elimina.

John MacIntyre
fuente
11
Nombrar es una cosa, pero enumerar las restricciones en los parámetros o las excepciones potencialmente lanzadas sigue siendo valioso.
Adam Lear
Sí, admitiré que tiene un punto, pero la mayoría de las veces las restricciones de los parámetros son obvias, ¿no?
John MacIntyre
No estoy seguro de estar de acuerdo con John. Con esta lógica, ninguno de los métodos de .NET Framework debería recibir ayuda de Intellisense.
Vaibhav
1
@vaibhav: dije "Recomendaría usarlos en cualquier clase pública, métodos y propiedades en una API, biblioteca, etc." ... eso cubriría lo que estás hablando, ¿no?
John MacIntyre
1
@John: extraño, podría haber jurado que leí algo completamente diferente cuando escribí ese comentario. Porque su segundo párrafo es exactamente lo que dije en otra parte de este hilo. Entonces, debo tener rocas en mi cabeza para escribir ese comentario. Sí, estoy de acuerdo con eso.
Vaibhav
2

Si descubre que tiene que seguir retrocediendo y editando sus comentarios para que se correspondan con el nuevo código, es posible que los esté haciendo mal en primer lugar. El elemento de resumen debe contener exactamente eso, un resumen, el qué y el por qué de lo que está resumiendo.

Describir cómo funciona algo en los comentarios viola DRY. Si su código no es lo suficientemente descriptivo, tal vez debería regresar y refactorizar.

Nadie
fuente
1

Sí, los he creado. [al construir nuevos sistemas desde cero]

No, nunca me he beneficiado de ellos. [cuando se trabaja en sistemas existentes que necesitaban mantenimiento]

Descubrí que los comentarios de "Resumen" eventualmente no se sincronizan con el código. Y una vez que noto algunos comentarios que se comportan mal, tiendo a perder la fe en todos los comentarios sobre ese proyecto; nunca estás seguro de en qué confiar.

Calles
fuente
Sin embargo, los comentarios obsoletos pueden considerarse un olor a código, incluso más a nivel de resumen. Si otros desarrolladores están cambiando funciones y no actualizan el resumen de lo que están haciendo, entonces uno podría argumentar que no están documentando su trabajo correctamente.
rjzii
1

Olvidar hacer algo no lo convierte en una mala idea. Olvidar actualizar cualquier documentación es. Los he encontrado muy útiles en mi programación y las personas que heredan mi código están agradecidos de tenerlos.

Es una de las formas más visibles de documentar su código.

Es difícil tener que encontrar el código fuente para leer la documentación en línea o desenterrar un documento que revise lo que hace el código. Si puede hacer aparecer algo útil a través de la inteligencia, la gente lo amará.

Abe Miessler
fuente
1

" Tiene que ser usado mucho, como yo;) "

Solía ​​jugar con comentarios (///). Para una clase simplemente puedes hacer un comentario como este

namespace test
{
    /// <summary>
    /// Summary description for Calendar.
    /// </summary>
    public partial class DatePicker : System.Web.UI.Page
    {

Pero, para un método, puede agregar más con la descripción de parámetros y tipos de retorno.

/// <summary>
/// Assign selected cases to the participating users based on the filters and configurations
/// </summary>
/// <param name="noOfParticipants">No. of participants to the Table</param>
/// <param name="value">Value of the participant</param>
/// <returns>No Of Cases Assigned on successfull completion</returns>
public long AssignCasesToParticipatingUsers(int noOfParticipants,string value)
{

Puede usar un atajo para crear este comentario (///+Tab).

Sreekumar P
fuente
0

usándolos excepto para bibliotecas

Ese es el momento en que son útiles. Con la generación de documentación XML activada y una referencia al ensamblaje, sin su proyecto, mostrará más detalles en intellisense.

Pero para los aspectos internos del proyecto actual, simplemente se interponen en el camino.

Ricardo
fuente
0

Los uso, pero como han dicho otras personas no universalmente. Para métodos pequeños, pueden ser fácilmente más grandes que el código que están explicando. Son más útiles para generar documentación que se puede dar a las personas nuevas en el sistema para que tengan algo a lo que referirse mientras lo aprenden. A pesar de que, como programadores, generalmente podemos descubrir qué es un código, ya que es bueno tener los comentarios para guiarnos y actuar como una muleta. Si tiene que escribirse en algún lugar, entonces en el código es el lugar donde es más probable que se mantenga actualizado (más probable que algún documento de Word flotando).

Todd Williamson
fuente
0

Uso el equivalente en VB (ya que no me dejan usar C #, aparentemente es demasiado difícil ... sin comentarios). Me parece muy conveniente. La mayoría de las veces espero hasta que el procedimiento o la función se haya completado bastante antes de ponerlos, solo para evitar tener que cambiar los comentarios, o hacer que estén "fuera de sincronización".

No necesariamente escribo una novela, solo los conceptos básicos, la descripción del parámetro y algunos comentarios (generalmente cuando hay algo "fuera de lo común" que está sucediendo allí, una solución u otra basura que preferiría no tener allí pero que tengo no hay opción "por ahora".) (Sí, lo sé, que "por ahora" puede durar años).

Estoy muy irritado por el código no comentado. Un consultor escribió la versión inicial de uno de nuestros componentes y no comentó nada y su elección de nombres deja que desear aquí y allá. Se fue hace más de un año y todavía estamos resolviendo sus cosas (además de trabajar en nuestras propias cosas).

MetalMikester
fuente