¿Un lenguaje que no permite comentarios generaría un código más legible? [cerrado]

15

Solo por curiosidad, comencé a preguntarme si un lenguaje que no permite comentarios generaría un código más legible, ya que se habría visto obligado a escribir un código de auto comentario.

Por otra parte, podría escribir un código tan malo como antes porque simplemente no le importa. ¿Pero cuál es tu opinión?

gablin
fuente
44
¿Crees que hay una diferencia entre un lenguaje que no permite comentarios y desarrolladores que no los usan?
Jeremy Heiler
21
La idea de que no permitir comentarios obligaría a los desarrolladores a escribir más código autodocumentado es absurda.
Adam Crossland
2
@Jeff que es una función IDE / editor, no una función langugae en mi humilde opinión
jk.
44
No estoy seguro de que sea posible obligar a los desarrolladores a hacer algo
jk.
2
@Adam @ jk01: incluso tienen un lenguaje que obliga a los desarrolladores a sangrar el código de una manera específica ;-)
Joris Meys

Respuestas:

61

Creo que los programadores encontrarían otra forma de agregar comentarios ...

string aComment = "This is a kludge.";
Philip Regan
fuente
77
Me gusta cómo este "comentario" tiene varias capas
Logan Capaldo
29
Un beneficio adicional es que irá en binario, ¡así que puedes ver los comentarios allí también! Hace que la ingeniería inversa sea mucho más simple.
1
Tienes razón. Tendríamos que usar declaraciones #ifdef en su lugar.
James
99
Este es probablemente el mejor ejemplo de "programación en un lenguaje" en lugar de "programación en un lenguaje" que he visto. =)
gablin
2
En MOO hay soporte para comentarios, pero todos los programas se analizan para su almacenamiento y no se analizan para su visualización, por lo que los comentarios se pierden. El modismo para los comentarios persistentes son los literales de cadena ala"this is a comment";
Ben Jackson
44

No creo que sea tan simple:

Incluso en un código bien documentado y autodocumentado, hay situaciones legítimas en las que debe escribir comentarios.

Nadie
fuente
13
+1 para comentarios es más que una simple narración de lo que está haciendo el código. Incluso el mejor 'código autodocumentado' necesita comentarios para elaborar muchas cosas. Muchas veces, el código tendrá dependencias externas, suposiciones de entrada, advertencias, áreas mejorables, vulnerabilidades conocidas e innumerables otras cosas que de otro modo nunca se reconocerán. Los comentarios tienen muchos usos.
Adam Crossland
3
Exactamente. ¿Cómo se registra "intención" o "por qué" o "prueba de corrección" sin comentarios?
S.Lott
2
De acuerdo, los comentarios deben ser "Por qué" y no "Qué". Cualquiera que no pueda obtener el Qué del código no debería leerlo.
Matthew leyó el
3
@Matthew: Para ser justos, puede escribir fácilmente código que no se descifre fácilmente. Pero sí, el código legible es la mejor fuente para "qué".
14

Supongamos que eres un programador perfecto (que no lo eres, pero supongamos) ...

Hay muchos efectos no obvios que pueden ocurrir en el código cuando interactúas con cosas que no escribiste. Por ejemplo, puede haber fallas de diseño en la biblioteca de otra persona o (si es un desarrollador de kernel) en el hardware de otra persona. Tener comentarios para explicar por qué usó kludge en particular en un lugar en particular puede ser esencial para comprender el código y asegurarse de que no se elimine (romper cosas).

Ken Bloom
fuente
11

Me resulta difícil comprender la idea de que eliminar opciones de un idioma mejoraría de alguna manera los programas escritos en dicho idioma. Los comentarios no son obligatorios, y escribir código autodocumentado tampoco lo es.

No hay sustituto para las buenas prácticas de desarrollo.

Otávio Décio
fuente
6

En teoría, COBOL se diseñó originalmente de tal manera que debía documentarse lo suficiente como para que incluso los no desarrolladores (es decir, los supervisores) pudieran revisar el código escrito y determinar lo que estaba sucediendo. Sin embargo, en la práctica, a medida que un programa se vuelve más complejo, es difícil entender todo lo que sucede únicamente a través del código.

Mientras que la eliminación de los comentarios podría obligar a algunos desarrolladores a escribir código que es mejor en la documentación del mismo, todavía hay desarrolladores que hay que escribir código pobremente documentada (es decir, los nombres de variables de a, b, c, etc.) y son esos hábitos que las personas necesitan ser entrenados a cabo de de. En esos casos, eliminar comentarios no afectaría a esos desarrolladores y podría obstaculizar los esfuerzos de otros desarrolladores para explicar piezas complejas de código.

rjzii
fuente
1
Estoy leyendo un código ahora con esto: argument = 3.0; aa = sqrt( argument ); bb = f( aa ); suspiro.
S.Lott
Cobol es un idioma especial. Pero el "." ¡El operador es malvado! Es como romper la sintaxis de una oración.
Loïc Faure-Lacroix
3

Cada programa se escribe para implementar requisitos funcionales que están fuera del programa, ya sea escritos o simplemente en la cabeza de alguien.

Creo que la función más esencial de los comentarios es establecer un mapeo entre los requisitos y el código. La razón por la que se necesita el mapeo es para permitir cambios incrementales. Cuando se produce un cambio en los requisitos, es necesario realizar los cambios correspondientes en el código, para que el código siga siendo una solución a los requisitos. Los comentarios sirven como una hoja de ruta para los cambios.

Si el lenguaje es un lenguaje específico de dominio (DSL) ideal perfectamente adaptado al problema que se está resolviendo, entonces el mapeo debería ser un simple isomorfismo y no serían necesarios comentarios. El código fuente simplemente indicaría el problema, y ​​no sería necesario decir nada más. La solución del problema estaría enterrada en la implementación del lenguaje.

Dado que los idiomas en los que trabajamos no son DSL, y lo seguirán siendo durante algún tiempo, aún necesitamos comentarios . Es una cuestión de grado. A veces, el problema es una buena coincidencia con el idioma en cuestión, pero generalmente no.

Ver también...

Mike Dunlavey
fuente
2

Trabajo en un lugar que no permite comentarios en línea (es decir, solo puede tener comentarios en la parte superior de las funciones). No, no hace que el código sea más fácil de leer. Lo hace peor en órdenes de magnitud.

Xodarap
fuente
Suponiendo que no hay límite para la cantidad de métodos, ¿por qué no refactoriza sus bloques de código en métodos aplicables y luego le da a los métodos nombres descriptivos (o más comentarios, en su caso)? En la mayoría de los códigos "buenos" que he visto, los métodos rara vez son más largos que aproximadamente 10 líneas, y es bastante obvio lo que hace.
Scott Whitlock
@Scott: soy un firme defensor de que el código debe autodocumentarse y que se deben evitar los comentarios en línea, pero prohibirlos explícitamente es excesivo.
Jason Baker
@Jason - Estoy de acuerdo con usted, pero no estoy de acuerdo con la idea de que sin comentarios en línea es "peor en órdenes de magnitud".
Scott Whitlock el
@Scott: Recibes muchos comentarios como "la razón por la que hacemos la extraña comprobación nula en la línea 37 es ..." y luego tienes que mover los ojos entre el código y los comentarios. Sería mucho más fácil tener ese comentario sobre la línea 37.
Xodarap
2

Evito comentar código, y funciona.

Evito todos los comentarios en código (en línea o en secuencia) a favor de docblock + valores significativos + programación espartana , y funciona.

Y sí, sé que los docblocks son técnicamente comentarios, aún así, en realidad son complementarios al código, no intrusivos y "estandarizados" ... todo lo que un comentario común no es.

Lo que creo que podría funcionar como un sustituto de los comentarios: un lenguaje / sintaxis / modismo estandarizado de docblock, algo así como anotaciones en java.

dukeofgaming
fuente
"un lenguaje / sintaxis / idioma estandarizados de docblock": ¿No doxygenfuncionaría para esto? en.wikipedia.org/wiki/Doxygen
sleske
Doxygen es una herramienta de documentación, igual que phpdocumentor y lo que genera la documentación de Java de javadoc (homonim?). Lo que quiero decir es que el lenguaje / sintaxis / modismos era parte del lenguaje de programación en sí, y no un comentario que debe analizarse para etiquetas / propiedades.
dukeofgaming
44
Entonces, evitas los comentarios llamándolos de otra manera.
Nate CK
2

No solo no afectaría la calidad, como otros han observado, en realidad sería realmente molesto.

Estoy seguro de que la mayoría de nosotros hemos hecho algo como esto de vez en cuando:

foreach ( myObject obj in SomeList )
 {
    Debug.Writeline( obj.Name );
//  for some reason this isn't working
//  obj.SetArielPotency( setting );
//  obj.DoSomeProcess();       
 }

¿Qué tan irritante sería si no pudieras comentar algunas líneas de código para averiguar de dónde proviene ese error?

Independientemente de los comentarios sobre cómo funciona el código, cosas prácticas simples como eso o dejar una TODOnota conveniente son cosas que hacen que sea más fácil solucionar problemas menores y recordar lo que estábamos haciendo cuando comenzamos a escribir el código.

glenatron
fuente
1

Los comentarios son como un resumen del libro. Claro, puedes entender todo leyendo el código, pero ¿por qué quieres leer una página completa cuando se puede resumir en una línea comentada?

revs Niphra
fuente
3
Si puede resumirlo en una línea, puede nombrar una función o método de forma suficientemente descriptiva para explicar lo que hace.
Scott Whitlock
1

Si bien estoy de acuerdo con las otras respuestas de que incluso el código autodocumentado necesita comentarios, eso solo es relevante para los idiomas actuales .

Creo que la verdadera pregunta es: "¿Es posible diseñar un nuevo lenguaje de programación que no necesite comentarios?" Tendría que ser bastante alto nivel con una gran cantidad de abstracción. Cada declaración y función se vería obligada a ser legible a través de la sintaxis del lenguaje.

Cabra descontento
fuente
1
La programación literaria ofrece un lenguaje que no necesita comentarios. Usted escribe su documento, que incluye toda la explicación necesaria, soporte, prueba, intención, compensaciones, errores, etc., así como el código. Dado que el código no está destinado a estar solo, funciona bien.
S.Lott
@DisgrunteldGoat: olvídate de eso. Tendrías que empezar desde un idioma en particular, y yo hablo solo 5. El resto de los idiomas estaría tan perdido como lo estarías en holandés.
Joris Meys
Re segundo párrafo: por supuesto que puedes. Tome todos los idiomas actuales que ofrecen soporte para comentarios y elimine el soporte para comentarios. Si estos idiomas necesitaran comentarios, entonces estarían en el código compilado o el intérprete haría algo más que ignorarlos.
Kit del
1

Los programadores indisciplinados escribirán código incorrecto, sin importar el idioma.

La intriga de ese pitón, que solo tiene un aspecto privado por convención (prefijo _), no hace ningún esfuerzo por controlar esto, y todavía se está escribiendo mucho código fino.

Rant: A veces creo que los lenguajes más permisivos obligarían a más personas a aprender a codificar correctamente, en lugar de lo contrario (es decir, el unidireccional y condenado de Java si quieres pensar en las funciones como objetos de primera clase).

Macke
fuente
1

Adivinaré: probablemente no. ¿Por qué? Porque tendrías que codificar "por qué" como formalismo en el lenguaje y porque "por qué", ya sea codificado en lenguaje o comentario en lenguaje, los programadores subutilizan de todos modos.

Equipo
fuente
1

Ciertamente, el código puede hacerse comentarios al explicar lo que está haciendo, pero no siempre es posible que el código explique por qué lo está haciendo. Ahí es donde más se necesitan comentarios.

Si, por ejemplo, se necesita una sección de código para cumplir con una regulación específica, ¿cómo se explica eso sin un comentario? Si el algoritmo utilizado por un código en particular se describe en un artículo escrito en 1998 por M. Matsumoto y T. Nishimura, ¿cómo lo explica sin un comentario? Si un algoritmo no proporciona exactamente la funcionalidad óptima pero hace un compromiso justificado muy específico que puede causar problemas futuros si se cambia otro código, ¿cómo explica eso sin un comentario?

¿Qué sucede si una sección del código fue auditada por un auditor independiente, por lo que no puede modificarse sin invalidar esa auditoría y el código se utiliza para construir un producto cuyo cumplimiento con esa auditoría es requerido por sus clientes? ¿Cómo indicas eso sin un comentario?

David Schwartz
fuente
0

Siempre he pensado que sería bueno tener un comentario de una palabra para que si prefijas una palabra con un símbolo (digamos dos puntos), esa palabra sea ignorada. De esa forma, podría haber dicho un ceceo que solo permitía comentarios de una palabra dentro de una expresión-s. Por ejemplo, podrías convertir esto:

(if (= x y)
    x
    y)

...dentro de esto:

(if (= x y)
    :then x
    :else y)

Si es absolutamente necesario, puede encadenar múltiples comentarios de una palabra para formar un comentario en línea:

(if x :Remember, :x :could :be :nil!
    ...)

Por supuesto, esto es un dolor de escribir. De hecho, ese es el punto. Lo alienta a usar los comentarios en línea con moderación y mantenerlos cortos y al grano. Pero tengo la sensación de que me resultaría difícil convencer a alguien de que use el lenguaje.

Jason Baker
fuente
También dificulta la lectura, lo que anula el uso de comentarios para hacer que el código sea más legible.
Nate CK
0

Esto es doble o nada. Algunos programadores no hacen nada para que el código sea legible. No permitir comentarios reforzará esto. Algunos programadores escriben buenos comentarios, incluso si serían aún mejores si estuvieran refactorizando el código en lugar de los comentarios; eliminar los comentarios puede obligarlos a mejorar la refactorización.

Razones por las cuales esta es una buena idea: - Ninguna

Razones por las cuales esta es una mala idea: - Hay muchos más programadores atroces que programadores buenos pero no buenos - Casi siempre debería haber algunos comentarios para extraños trucos, resúmenes, etc. - Incluso si evita los comentarios, probablemente usará comentarios como una etapa en el camino: agregue un comentario cuando esté escribiendo algo, y luego regrese y refactorícelo. Pero no siempre puedes hacerlo bien de inmediato porque todavía estás aprendiendo. - Alentará a las personas a trabajar en torno a él - ¿Quién lo usaría? Las personas que escriben códigos ilegibles y quieren una excusa (mala) y las personas que ya están enamoradas de la idea (que simplemente pueden "no escribir comentarios" para empezar). Si esto es lo que desea, simplemente escriba un estándar de codificación que muestre cómo desea que lo hagan las personas.

Razones en las que esto puede ser relevante: donde podría ser útil es como parte de un sistema para mejorar "no hacer comentarios", por ejemplo. un idioma o IDE que tiene un buen soporte para algo mejor que comentarios y como parte de su discurso, evita los comentarios. No sé cómo funcionaría, pero es un buen punto en el que vale la pena pensar al menos.

Jack V.
fuente