¿Debería la sintaxis para deshabilitar el código diferir de la de los comentarios normales?

8

Por varias razones durante el desarrollo, a veces comento código. Como soy caótico y a veces tengo prisa, algunos de estos llegan al control de la fuente.

También uso comentarios para aclarar bloques de código.

Por ejemplo:

MyClass MyFunction()
{
    (...)
    // return null; // TODO: dummy for now
    return obj;
}

Aunque "funciona" y muchas personas lo hacen de esta manera, me molesta que no se pueda distinguir automáticamente el código comentado de los comentarios "reales" que aclaran el código:

  • agrega ruido al intentar leer el código
  • no puede buscar código comentado, por ejemplo, un enlace de confirmación en el control de origen.

Algunos lenguajes admiten múltiples estilos de comentarios de una sola línea, por ejemplo, en PHP que puede usar //o #para un comentario de una sola línea, y los desarrolladores pueden ponerse de acuerdo en usar uno de estos para el código comentado:

# return null; // TODO: dummy for now
return obj;

Otros lenguajes, como C # que estoy usando hoy, tienen un estilo para los comentarios de una sola línea (¿verdad? Desearía estar equivocado). También he visto ejemplos de código "comentando" usando directivas de compilación, lo cual es excelente para bloques grandes de código, pero un poco exagerado para líneas individuales ya que se requieren dos líneas nuevas para la directiva:

#if compile_commented_out
    return null; // TODO: dummy for now
#endif
return obj;

Entonces, como el código comentado ocurre en todos los idiomas (?), ¿No debería el "código deshabilitado" tener su propia sintaxis en las especificaciones del idioma? ¿Los pro (separación de comentarios / código deshabilitado, los editores / control de fuente actúan sobre ellos) son lo suficientemente buenos y los contras ("no deberían comentar de todos modos", no son una parte funcional de un lenguaje, potencial retraso IDE (gracias Thomas )) vale la pena sacrificar?

Editar

Me doy cuenta de que el ejemplo que usé es tonto; el código ficticio podría eliminarse fácilmente ya que se reemplaza por el código real.

deltreme
fuente
No veo nada demasiado malo en esto: comentar y descomentar pequeños bloques de código a veces es una táctica útil para depurar errores muy específicos en grandes bases de código heredadas. Creo que esto me ayuda a reducir los problemas (además de usar un depurador adecuado, por supuesto). No me importaría ver a un tipo especial de comentario, tal vez /# ... #/que pondría de relieve de manera diferente en el IDE (por señales visuales) y tal vez generar un compilador de alerta que luego sería atrapado y reportado en el nightly build si alguien no comprobar tales cambios de nuevo en control de fuente.
FrustratedWithFormsDesigner

Respuestas:

18

En primer lugar, en su ejemplo hay comentarios "TODO". Estos tipos de comentarios son especiales porque los IDE (al menos Eclipse y Visual Studio) los detectan como marcadores de "tareas". Pero estoy seguro de que lo sabe ya que los usa, y supongo que no se refiere a ellos cuando usa el término "código deshabilitado".

En cuanto al código deshabilitado en sí, mi opinión es que contamina el código. Utilizo otro mecanismo para hacer un seguimiento de lo que había antes: el repositorio de origen . Excepto cuando estoy en un modo de código / prueba / código / prueba ..., no comento código no utilizado, lo elimino. Y cuando es el caso, comentar líneas X es solo cuestión de un atajo de teclado.

Editar: así que sí, olvidé responder su pregunta explícita, creo que no es útil tener comentarios especiales para el código deshabilitado. Si realmente desea conservar el código, pero diga "no lo use", siempre puede marcarlo como @depreused pero ese no era el punto de su pregunta.

Jalayn
fuente
Solía ​​escribir código sucio y estaba orgulloso de usar "hacks" y soluciones rápidas, hoy en día aprecio la estructura, tal vez pueda acostumbrarme a esto también.
deltreme
2
TLDR; Usar control de fuente.
Chris
1
@deltreme Admito que estaba haciendo lo mismo (¡demuestre cómo "mejoré" el código!) antes de comenzar a utilizar seriamente un repositorio fuente en un entorno profesional. Desde entonces, aprecio tener que leer la menor cantidad de líneas de códigos que debo leer todos los días.
Jalayn
Utilice el control de origen y examine los diferenciales antes de comprometerse.
UncleZeiv
1
Lamentablemente, el foco de las respuestas ha estado en cómo no comprometer el código deshabilitado, no en lo tonto que es realmente el término "comentar". Esperaba más de una mezcla. Al aceptar esta respuesta cuando estaba pidiendo una opinión y usted tiene la comunidad que lo respalda: P
deltreme
5

Por varias razones durante el desarrollo, a veces comento código. Como soy caótico y a veces tengo prisa, algunos de estos llegan al control de la fuente.

Creo que esta es la raíz del problema. Ser caótico y apresurado solo introducirá problemas. Descubrir por qué su desarrollo se está acelerando y no está bien controlado debería ser el primer paso, no tratar de encontrar el código comentado.

Entonces, como el código comentado ocurre en todos los idiomas (?), ¿No debería el "código deshabilitado" tener su propia sintaxis en las especificaciones del idioma? ¿Los pro (separación de comentarios / código deshabilitado, editores / control de fuente actuando sobre ellos) son lo suficientemente buenos y los inconvenientes ("no debería comentar de todos modos", no una parte funcional de un lenguaje) vale la pena sacrificar?

No lo creo. El código comentado es una mala práctica y no creo que los idiomas deberían alentar a nadie a usarlo. Sí, la gente lo hace y lo he visto, pero me niego a verificar el código mío que está comentado. Dar a las personas la capacidad de administrar fácilmente el código antiguo no utilizado está más allá del alcance de un lenguaje y es algo que pertenece al ámbito del control de versiones.

También me preocupan las limitaciones técnicas. Para que esto funcione, deberá analizar los comentarios y determinar si están comentados como fuente o texto o agregar un nuevo token al idioma. Dependiendo de la complejidad actual del lenguaje, no estoy completamente seguro del impacto que esto tendría en la compilación (identificando si una línea es o no un código válido para compilar). Además, la gente esperaría que los IDE gestionen esto en tiempo real (¿existe una relación entre la complejidad de la sintaxis de un lenguaje y la capacidad de respuesta de IDE para encontrar y resaltar diversas construcciones y errores).

Thomas Owens
fuente
Estoy tratando de manejar mi caos y apuro, y estoy totalmente de acuerdo en que ahí es donde todo comienza. Sin embargo, actualmente sucede y estoy seguro de que tan pronto como esté libre del código para comentar, alguien más tomará mi lugar. Quizás solo estoy regañando. Al final no es gran cosa. En cuanto a los aspectos técnicos: los IDE podrían incluso tratarlos como comentarios regulares, usar un color u ocultarlos; muchos IDE ya lo admiten para otros elementos de sintaxis.
deltreme
@deltreme No me importa cómo los IDEs los apoyarían en la superficie. ¿Cómo los encontrarían los IDE y los procesarían de una manera precisa pero que mantenga la capacidad de respuesta? Agregar tokens a un idioma o agregar procesamiento de texto tiene el potencial de ralentizar el análisis o generar resultados inexactos.
Thomas Owens
No pensé que la discusión iría de esta manera :) Y no creo que agregar otro token (¿cuántos reconoce un IDE moderno hoy en día?) Daría como resultado un editor poco receptivo. Si lo ve como una amenaza potencial incluso en la etapa de investigación de este "proyecto", ¿tendría una estimación de cuál sería el% de pérdida de rendimiento? Digamos que agregamos un token y queremos un color para él en un IDE.
deltreme
@deltreme No creo que agregaría tanto tiempo para la mayoría de los proyectos, pero en términos de tiempo agregado / valor agregado, la relación es muy pobre. Si tuviera que agregar esos pocos microsegundos adicionales a decenas de miles de archivos de origen, simplemente agregó milisegundos a todo lo que analiza un archivo de origen, cada vez que analiza un archivo de origen. Para un IDE, eso generalmente sería cada vez que guarde. También sería para sus compilaciones posteriores al compromiso y / o diarias. Combine esos milisegundos y rápidamente se puede medir en minutos durante la vida útil de un proyecto para tratar con una característica que no agrega valor.
Thomas Owens
1
@deltreme Absolutamente no. Si ha deshabilitado el código en su proyecto que se convirtió en control de fuente, lo está haciendo mal. De vez en cuando, si estoy reescribiendo un método, podría comentar el método anterior y volver a implementarlo, pero una vez que esté seguro de que el nuevo código pasa las pruebas y funciona según lo previsto, elimino el código deshabilitado y lo registro. Si está En realidad, registrar el código deshabilitado o confiar en él de alguna manera, es una señal de problemas más grandes en el proyecto que deben abordarse.
Thomas Owens
4

Incluso si solo hay una sintaxis de comentarios en el idioma que está utilizando, aún puede agregarle su propio sabor, he trabajado en proyectos donde // denotó una línea deshabilitada y // - indicó un comentario. No es tan bueno como tenerlo incorporado, pero la mayoría de los IDE no saben que has usado las diferentes sintaxis para diferentes propósitos, por lo que a veces la forma antigua de ver los ojos para ver la diferencia funciona mejor.

Nicholas Smith
fuente
Si el equipo se dedica a este sabor, sin duda sería una buena solución. Incluso se puede "enganchar-enganchar", y si olvida los caracteres adicionales para algo que se entiende como comentario, también alertará.
deltreme
1

En oposición a las respuestas, responderé con un "SÍ, ¡debería haber una sintaxis diferente!"

Desafiaría a cualquier desarrollador para que diga que pasan incluso un día de codificación sin comentar el código. Hacerlo no significa que uno no conozca el control de la fuente o que sea flojo. Incluso como Thomas Owens dice en su respuesta disidente, " Excepto cuando estoy en un modo de código / prueba / código / prueba ..., no comento el código no utilizado " .

¿Cuánto de su tiempo se gasta en el modo código / prueba / código / prueba? ¡Para mí eso es al menos el 90% del trabajo! En este momento estoy convirtiendo un gran proyecto OSX a iOS, y el primer paso fue desactivar todo el código que se estaba rompiendo hasta que tuve un trozo que funcionó. Durante las próximas semanas iré descomentando y arreglando el código lentamente a medida que lo haga funcionar.

Hay muchos otros casos también. ¿Qué sucede cuando usa un código de ejemplo donde a menudo encuentra instrucciones como "Descomentar lo siguiente para Windows" o "Descomentar esta línea para aplicaciones solo para iPhone"?

Sí, utilizaré el control de fuente todo el tiempo. Pero también SÍ, me encantaría que hubiera una manera de distinguir el código deshabilitado de los comentarios reales.

En resumen: cualquier programador que diga que no usa comentarios para deshabilitar el código está mintiendo. Hay más en la codificación que los archivos pulidos que compromete a HEAD. Hay muchas razones válidas para el código deshabilitado.

Sí, sería bueno si hubiera una sintaxis (o al menos una convención) para distinguir los comentarios verdaderos del código deshabilitado.

Stan James
fuente