2008-12-24 19 views
21

Después de algunas reflexiones estúpidas sobre las lenguas klingon, que vinieron de este post comencé un proyecto de pasatiempo tonto creando un lenguaje de programación klingon que se compila con el código de bytes Lua. Durante la fase inicial de diseño del lenguaje Busqué información sobre Klingon programmers, y descubrí sobre esta regla de programación Klingon:¿Los comentarios son necesarios para un lenguaje de programación?

Un VERDADERO Klingon Guerrero no comenta su código!

así que decidí mi lengua sería no apoyar al comentar, como cualquier buen Klingon nunca usarlos.

Ahora muchas de las formas Klingon no nos parecen razonables Programadores humanos, sin embargo, mientras incursiono en el diseño y la implementación de mi hobby, me di cuenta de que esta regla Klingon sobre comentarios es muy razonable, si no genial .

Extracción de la capacidad de observación de un lenguaje de programación significaba que TENGO escribir código leer y escribir, sin excepciones.

Me pregunto si hay algún idioma que no sea compatible con los comentarios?

¿Existen argumentos realmente buenos para no eliminar los comentarios de un idioma?

Editar: ¿Hay algún buen ejemplo de comentarios requeridos?


PS> Mi idioma manía anterior es parcialmente tonto de todos modos, por lo que no se centran demasiado en mi aplicación, tanto como el concepto de observaciones requeridas en general

+0

A veces mi Inglés necesita comentarios. Supongo que no soy Klingon. –

+1

Esto debe cerrarse – Foredecker

+1

¿Por qué dice que debería estar cerrado? Parece totalmente relacionado con la programación y parece poco probable que sea un duplicado de una pregunta existente. –

Respuesta

20

No estoy seguro de estar de acuerdo con "Tener" en la declaración "Eliminar la capacidad de comentar de un lenguaje de programación significaba que TENGO que escribir código alfabetizado, sin excepciones", ya que no es como si todo el código estuviera documentado . Creo que la mayoría de la gente escribiría un código ilegible.

Más al punto, personalmente no creo en la realidad del programa auto explicativo o API en el mundo práctico.

Mi experiencia al analizar manualmente la documentación de API completas para mi disertación sugiere que con demasiada frecuencia tendría que llevar más información de la que podría transmitir solo en la firma. Si elimina los comentarios de la interfaz de su idioma, ¿cuáles son las alternativas? No hay documentación no es una opción. Es menos probable que se lea la documentación externa.

En cuanto a la documentación interna, puedo ver su punto en el deseo de reducir la documentación para convencer a las personas a escribir mejor. Sin embargo, los comentarios sirven para muchos propósitos de colaboración y coordinación y están destinados a aumentar la conciencia de las cosas. Al desterrar estos detalles a ubicaciones externas, está reduciendo las posibilidades de que lleguen a conocimiento del lector en el futuro, a menos que sus herramientas sean geniales.

+0

+1 porque tener que externalizar la documentación de la dependencia es un punto importante a favor de los comentarios. –

+0

Gracias. En general, es un problema: las personas no buscan cosas si no son conscientes de que existen. Una gran parte de mi investigación se centra en la cuestión de si las personas investigan los documentos del método para ver si transmiten algo importante: no lo hacen, lo que conduce a problemas graves. – Uri

1

Se podría pensar que los desarrolladores escribir en su idioma hará un esfuerzo adicional para escribir código claro, pero la responsabilidad en realidad será en para diseñar un lenguaje que sea , de modo que exprese que no necesita ser comentado. Demonios, ni siquiera el inglés es así (¡todavía paréntesis!). Si su idioma no está diseñado, puede ser tan útil como Brainfuck y disfrutar de la popularidad y el respeto de Brainfuck.

¿Debo añadir enlaces o enlaces relacionados con los comentarios?

Además, las personas encontrarán formas de agregar comentarios si es necesario mediante el seccionamiento de cadenas y el uso indebido de nombres de variables (que no hacen más que pararse para recibir comentarios). ¿Has leído Godel Escher Bach?

+0

bien la respetabilidad no es el problema principal aquí, pero además de eso no puedo pensar en ninguna característica del idioma que requiera expresividad en los comentarios, ¿tiene algún buen ejemplo? –

+0

AFAIK, todos los analizadores de idiomas ignoran los comentarios, ya que se utilizan para escribir en lenguajes naturales, que son expresivos como podemos obtener pero dependen demasiado del contexto para escribir analizadores determinísticos. –

+0

No he leído GED, pero parece una buena lectura. Voy a pedirlo :) –

0

Creo que la pregunta puede ser lo autocontenido que sería el lenguaje sin comentarios? Si, por ejemplo, se compila en archivos DLL que se utilizan en otro código, ¿cómo se puede saber algo más allá de la firma de la función en términos de lo que requiere, cambia y devuelve? No me gustaría que los nombres de las funciones sean docenas de caracteres para tratar de expresar lo que se puede hacer fácilmente con los comentarios sobre la función que se pueden usar como documentación dentro de algo como el Examinador de objetos en Visual Studio, por ejemplo.

3

Los idiomas necesitan comentarios.Al menos el 95% de los comentarios pueden ser reemplazados por un código más claro, pero aún hay suposiciones que necesita documentar y absolutamente necesita documentar si hay algún problema externo con el que esté trabajando.

Nunca escribo ningún comentario sin antes considerar si puedo cambiar el código para eliminar la necesidad, pero a veces no puedo.

7

En general, los comentarios son una verruga que indica un diseño deficiente, especialmente comentarios largos y confusos donde es claro que el desarrollador no tenía ni idea de qué diablos estaban haciendo e intentó compensarlos escribiendo un comentario.

Lugares donde los comentarios son útiles:

  • Dejando a un número de ticket junto a un arreglo para que los futuros programadores pueden entender los requerimientos del negocio
  • Explicando un corte particularmente difícil
  • Comentario a la lógica de negocio para una pieza de código
  • descripciones escuetas en documentos de la API por lo que un tercero puede usar su API

En todos los casos, los programadores deben tratar de escribir código que sea descriptivo y NO escribir comentarios que describan un código mal escrito. Dicho esto, creo que hay muchas razones válidas por las que los lenguajes deben y deben respaldar los comentarios.

+0

+1 para ejemplos reales, especialmente para el boleto (y en relación con los TODO) –

+0

boletos y TODO se pueden incorporar al idioma. De hecho, eso sería increíble. –

+0

Su derecha Marxidad, TODO y las entradas se podrían hacer de manera similar a Deprecatation, una gran idea incorporará eso en mi diseño –

7

el código tiene dos públicos distintos:

  • El compilador
  • seres humanos como nosotros

Si decide eliminar los comentarios en total, la suposición de que usted está tomando es que usted será atendiendo solo al compilador, y a nada más.

Por supuesto que, siendo Klingon, puede que no necesite comentarios porque no es humano. ¿Quizás podrías demostrarnos claramente tu habilidad hablando en IL?

+0

+1 para Human Audience allí –

21

No comentes QUÉ estás haciendo, pero POR QUÉ lo estás haciendo.

El QUÉ es cuidado por un código limpio, legible y simple con la opción adecuada de nombres de variables para soportarlo. Los comentarios muestran una estructura de nivel superior al código que no puede mostrarse (o es difícil) por el código en sí.

+0

También puedo sugerir que se mantengan actualizados los comentarios cuando se refactorice. Espero que eso sea evidente. –

2

Si bien es cierto que los seres humanos necesitan poder comentar el código, no es absolutamente necesario que el lenguaje admita comentarios directamente: para la mayoría de los idiomas, sería trivial escribir un script que borre los comentarios de una línea (por ejemplo, todas las líneas que comienzan con '#' o algún otro caracter) luego ejecuta el compilador.

En realidad, sin embargo, estoy sorprendido y decepcionado de saber que incluso mis idiomas de programación esotéricos favoritos admiten comentarios: Brainf**k y Whitespace. Estos idiomas están destinados a ser difíciles de leer, por lo que parece que no deberían admitir comentarios. (A diferencia de mi otro idioma esotérico favorito: LOLCode, que está destinado a ser autodocumentado, en lolcats-speech)

No estaría de acuerdo con las otras respuestas sobre este punto: digo, sé fiel a tu visión de un lenguaje de programación Klingon, ¡y no admite comentarios!

+0

Estoy totalmente de acuerdo, tanto me jacto de su capacidad para escribir comentarios libremente en el código :( –

1

Será una mala idea eliminar la instalación de comentarios por completo. Seguramente los desarrolladores deben aprender a escribir código con un mínimo de comentarios, es decir, a escribir código de auto documentación, pero hay muchos casos en los que uno tiene que explicar por qué algo se hace de la manera que es. Tenga en cuenta los siguientes casos:

  • un nuevo desarrollador podría iniciar el mantenimiento del código y el dev original, se ha marchado de entrada/salida del proyecto
  • un cambio en la especificación o requisito de mercado conduce a algo que es contrario a la intuición
  • copiar notificación correcta especialmente si de código abierto (algunas librerías de código abierto requieren que se hace esto)

también es mi experiencia que los nuevos programadores tienden a comentar más y a medida que desarrollan la experiencia de su código tiende a ser auto documentar y concisa . En general, los comentarios deben ser sobre POR QUÉ y no CÓMO o QUÉ.

+0

+1 para jerga legal! Eso es muy cierto –

0

¡Por supuesto!

La razón principal son los desarrolladores novatos. No todos saben cómo escribir código alfabetizado. En realidad, hay millones por ahí que no obtienen una NullPointerException cuando ven uno.

Todos comenzamos en algún momento.

Pero si solo se dirige a desarrolladores "expertos", ¿para qué preocuparse por el idioma en primer lugar? Deberías ser using butterflies !!! ¡Eso es lo que el verdadero desarrollador usa!

Comentarios es una necesidad, intenta hacerlo más difícil si lo deseas (como usar # // ##/sequence para crear un comentario o algo así) pero no lo dejes afuera.

:)

1

NO - no hay un solo lenguaje de programación por ahí que requiere comentarios.

El idioma es para la computadora. Los comentarios son para los humanos. Puedes escribir un programa con 0% de comentarios. Se ejecutará, correcta o incorrectamente. No puedes escribir un programa con 100% de comentarios. No compilará, no main(), etc. o, para los lenguajes de scripting, no hará exactamente nada.

Y, además, real programmers don't comment their code. Al igual que Klingons.

+0

+1 para pruebas de apoyo;) –

+0

tlho 'SoH hijo de Gould! –

2

Un punto en contra de los comentarios es que tienden a fallar con el código. Cada vez que agrega una redundancia, se arriesga a este tipo de inconsistencia.

En realidad, he visto algunas investigaciones interesantes cuando un grupo usaba PNL para analizar comentarios de bloqueo en algún sistema grande y luego compararlos con los resultados del análisis estático y solucionar algunos errores de esa manera.

+1

¿Tienes una URL para eso, tal vez? – TraumaPony

+0

¿Y qué es NLP? Programación neurolingüística – innaM

+0

NLP es procesamiento de lenguaje natural. Cualquier técnica que intente leer automáticamente el lenguaje natural. Tendré que desenterrar la referencia y publicarla. – Uri

11

Ugh, no ser capaz de comentar rápidamente una línea (o líneas) durante las pruebas me resulta molesto, especialmente cuando se crean scripts.

+0

+1 porque es verdadero :) –

+0

Python lo maneja muy bien. Simplemente envuelva su bloque de "código muerto" en comillas triples, y el intérprete lo interpreta como un literal de cadena que no se usa. Incluso C y C++ lo manejan con el preprocesador. Los comentarios no son necesarios para suprimir temporalmente el código. – Tom

+0

¿Por qué querría escribir 6 caracteres en lugar de dos? –

1

¿Se necesitan comentarios para un lenguaje de programación?

No. En el gran esquema de cosas, a un compilador no le importa un comentario y solo quiere que el código reduzca a un denominador común más bajo.

¿Es útil para un lenguaje de programación proporcionar una construcción de comentarios?

Sí. Los comentarios son muy útiles para un programador y no solo para simular como saben lo que están haciendo, sino también para depurar y documentar de manera útil.

1

Si bien estoy de acuerdo con las respuestas de Uri, yo también hice un lenguaje sin comentarios. (ichbins.) El lenguaje debía ser lo más simple posible al mismo tiempo que era capaz de expresar su propio compilador de forma limpia; ya que puedes hacer eso sin comentarios, se deshicieron.

Estoy trabajando de vez en cuando en una revisión que admite comentario, pero un poco diferente: estilo de alfabetización de programación con código anidado en texto en lugar de comentarios incrustados en el código. También podría obtener ejemplos/casos de prueba más tarde como una característica de idioma de primera clase.

Buena suerte con la piratería Klingon. :-)

2

¿No se sabe tanto de programación alfabetizada como de código? Ciertamente, gran parte de lo que he visto de la programación alfabetizada tiene tanta explicación como el código, si no más comentarios.

0

Estoy de acuerdo con usted en que el código bien escrito no necesita ningún comentario como "El código es solo una buena documentación disponible para el programador." Sin embargo, esta es una condición ideal, no todos escriben un buen código todo el tiempo bien en los comentarios futuros están obligados

1

que no se puede decir lo agradecido que estoy por Javadoc -... que es muy fácil de configurar dentro de los comentarios Así que por lo menos un sentido en el que los comentarios son útiles

+0

Yeah Javadoc es agradable :) –

0

Una vez escribí una aplicación de VB (un juego de mesa tonto inspirado en Monopoly) sin comentarios. Pero lo hice solo para pis Estoy fuera de mi maestro, quien nos había dicho que los comentarios eran para "lo que sea que encontremos relevante, así podríamos recordarlo más tarde".

1

No, por supuesto, un idioma no tiene por qué tener comentarios. Pero un programa (útil) tiene que tener comentarios ... No estoy de acuerdo con su idea de que el código alfabetizado carece de comentarios. Un código muy bueno es fácilmente comprensible con comentarios, pero solo con dificultad sin.

3

Si bien todo el código fuente tiene copyright por defecto. A menudo es bueno:

  1. recordar a la persona que lee el código fuente que está sujeto a derechos de autor

  2. decirle a la gente lo que los términos de la licencia son para ese archivo de código fuente

  3. diles ya sea que estén buscando un secreto comercial protegido

Lamentablemente, sin comentarios, es difícil de hacer esto.

3

No necesita una sola aserción en su código porque, en el modo de lanzamiento, ya no están. Pero cuando C++ no tenía aserciones incorporadas, alguien escribió la macro assert para reemplazarla.

Por supuesto que usted no necesita comentarios, ya sea, por más o menos la misma razón. Pero si diseña un lenguaje sin comentarios, la gente comenzará a hacer cosas como:

HelperFunctionDoesNothing("This is a comment! Blah Blah Blah..."); 
+0

+1 para el ejemplo de abuso :) –

4

Tengo curiosidad. ¿Cómo evitas que alguien declare una cadena estática que contiene un comentario y luego ignora la variable para el resto de la función/método/procedimiento/batalla/lo que sea?

var useless_comment = "Can we destroy our enemies?" 
if (phasers on full) return Qapla' 
+0

no se puede detener 'em;) Pero, de nuevo, no podemos detener muchas cosas –

1

Creo que los comentarios son necesarios en muchas situaciones.

Por ejemplo, piense en los algorítmicos. Supongamos que hay una función escrita en C que resuelve el Traveling Salesperson Problem, existe una amplia gama de técnicas que se pueden utilizar para tratar este problema. Y los códigos son generalmente crípticos por su naturaleza.

Sin describir explícitamente los parámetros y el algoritmo utilizado, mediante el uso de comentarios, es casi imposible reutilizar este fragmento de código.

3

¿Soy el único que comenta un par de líneas código para una serie de propósitos?

+0

Usted no está solo:) – Gant

+0

¿Los Klingon no usan control de versión tampoco? :-) – richq

0

El código perfecto no necesita ningún comentario. Debería ser simple y comprensible para principiantes completos.

0

Cualquier código necesita comentarios, intento explicar el motivo y el funcionamiento de cada función que escribo en 1 o 2 líneas.

El código que se explica solo existe en un mundo perfecto, siempre hay algún truco extraño o una razón para hacer algo rápido y sucio en lugar de hacerlo de manera apropiada. Lo mejor que debe recordar es comentar POR QUÉ el código hace lo que hace, un buen código explica QUÉ lo hace el 99% del tiempo.

Escribe algo simple, como un fragmento de código que pueda resolver un rompecabezas de Sudoku (3 loops bastante simples) e intenta leerlo 3 meses después. Inmediatamente encontrará algo que no está exactamente claro.

1

¿Podemos vivir sin comentarios sobre el código? Claro, pero eso no hará que vivir sea más fácil.

0

El código se escribe una vez, pero se lee muchas veces a lo largo de su vida útil; por lo tanto, vale la pena optimizar para la legibilidad. El nombramiento claro y consistente de todo, desde constantes hasta clases, es necesario, pero puede o no ser suficiente para lograr este objetivo. Si no, completa los espacios con comentarios y mantenlos como lo harías con el código.

1

Los comentarios son útiles porque le aseguran a la persona que lee su código, probablemente al "futuro yo", que ha pensado en su bienestar.

+0

Seguramente solo un humano pensaría en el bienestar de los mantenedores, los klingon no se molestarían con eso. Pero como humano tiene sentido :) –

1

Va a ser más difícil de lo que piensas para hacer un lenguaje donde los comentarios son imposibles.

if (false) { 
    print("This is a comment. Chew on that, Klingons!") 
} 
Cuestiones relacionadas