Cada vez que escribo una construcción típica de if-else en cualquier idioma, me pregunto cuál sería la mejor manera (en términos de legibilidad y visión general) para agregarle comentarios. Especialmente al comentar la cláusula else, los comentarios siempre se sienten fuera de lugar para mí. Digamos que tenemos una construcción como esta (los ejemplos están escritos en PHP):
if ($big == true) {
bigMagic();
} else {
smallMagic()
}
Podría comentarlo así:
// check, what kind of magic should happen
if ($big == true) {
// do some big magic stuff
bigMagic();
} else {
// small magic is enough
smallMagic()
}
o
// check, what kind of magic should happen
// do some big magic stuff
if ($big == true) {
bigMagic();
}
// small magic is enough
else {
smallMagic()
}
o
// check, what kind of magic should happen
// if: do some big magic stuff
// else: small magic is enough
if ($big == true) {
bigMagic();
} else {
smallMagic()
}
¿Cuáles son sus ejemplos de mejores prácticas para comentar esto?
else { // for future reader: sorry, at the moment of writing this I did not have time and skills to come up with a better way to express my logic
Respuestas:
Yo prefiero cualquiera:
o:
Parece un poco tonto escribir un comentario explicando lo que verifica su condición a menos que el código no lo indique claramente. Incluso entonces, es mejor reescribir el código para que sea lo más claro posible. Lo mismo ocurre con los cuerpos de los bloques condicionales: si puede hacer la razón para hacer algo obvio, hágalo en lugar de comentar.
No me suscribo a la filosofía de "nunca escribir comentarios", pero sí creo en evitar los comentarios que dicen lo que el código debería decir. Si escribe un comentario como "verifique qué tipo de magia debería suceder" cuando el código podría decir
if ($magic == big) {...
, los lectores dejarán de leer sus comentarios muy rápidamente. El uso de menos comentarios más significativos da más valor a cada uno de sus comentarios, y es mucho más probable que los lectores presten atención a los que usted escribe.Elegir nombres significativos para sus variables y funciones es importante. Un nombre bien elegido puede eliminar la necesidad de comentarios explicativos en todo el código. En su ejemplo,
$magic
o tal vez$kindOfMagic
parece ser un nombre mejor que$big
desde entonces, según su ejemplo, se está probando el "tipo de magia", no la "grandeza" de algo.Di todo lo que puedas en código. Guarde la prosa para los casos que exigen más explicación de la que razonablemente puede escribir en el código.
fuente
Prueba con nombres explicativos de variables
Los comentarios pueden ser geniales, pero cuando sea posible, haga que el código se documente automáticamente. Una forma de hacerlo es con nombres explicativos de variables. Por ejemplo, en lugar de esto:
Prefiero una variable con nombre:
fuente
is_potential_elvis_impersonator
. (Es / Has / etc. prefijo para variable booleana ..)Solo para completar algunos comentarios:
Por cierto: recomiendo este libro.
fuente
Los comentarios no deberían parafrasear el código, sino que explican cosas que no están en el código (imagen más amplia, por qué, por qué no se ha elegido una alternativa ...) Y sus comentarios de ejemplo son solo eso: paráfrasis del código.
A veces puede sentir que se necesita una paráfrasis al comienzo de la
else
rama, pero eso a menudo es una señal de que suthen
rama es demasiado grande.fuente
En su ejemplo específico, los comentarios probablemente no sean necesarios. Como mencionó Caleb , si el código está escrito claramente y las variables tienen nombres semánticos, es menos probable que las declaraciones necesiten comentarios.
Compare su fragmento con esto:
En este caso, definitivamente querrá usar comentarios para describir lo que representan x, func1 y func2 (y abofetear a la persona que nombró las cosas según ese esquema, especialmente si fue usted). Ni siquiera se puede saber si
$x
se supone que es un booleano. Pero este también es un caso en el que no necesariamente necesita comentarios, si puede refactorizar y cambiar el nombre.En general, me gusta escribir comentarios para bloques lógicos que describen cosas que el código no puede por sí solo. Una línea cada ~ 10-20 líneas que describe lo que logra el siguiente puñado de líneas en un nivel superior de abstracción (por ejemplo,
// Make the right amount of magic happen
para su ejemplo) lo ayudará a mantenerse orientado y le dará a un nuevo revisor una visión de lo que está haciendo y cuándo .En realidad, a menudo escribo estas frases antes de comenzar a escribir código, para no perder la noción del flujo que se supone que debe tener el segmento.
Finalmente, si realmente prefiere (o hay un mandato que requiere) comentar cláusulas en un bloque if, independientemente de la legibilidad del código, le recomiendo:
Siento que es el más limpio, porque el comentario se alinea con el código al que pertenece. Un comentario que describa qué código debe estar lo más cerca posible del comentario que describe.
fuente
Mantengo mis soportes alineados y los coloco justo después del soporte.
[Condition] -> [pseudo-code]
Por otro lado, técnicamente significa que todas las demás condiciones fallaron, por lo que generalmente uso paréntesis.
([Condition]) -> [pseudo-code]
Nota: esto es para C #.
fuente
Intento usar comentarios dentro del bloque que dicen qué hace ese bloque (su primera muestra).
Donde esto se rompe es cuando se usa
elseif
. Utilizo Basic para que no haya un bloque final explícito y, a menudo, tengo que comentar qué está comprobando la condición que se encuentra en la línea anterior (con un salto de línea, por supuesto) si es demasiado larga.fuente
Si todo lo anterior falla, agregue un comentario descriptivo muy pequeño antes de la declaración if, para aclarar su intención. De lo contrario, realmente no debería ser necesario hacer ningún comentario.
fuente
En C ++ o C #, normalmente no comentaría casos simples (cuando está claro lo que está sucediendo), y uso este tipo de estilo para comentar la última cosa ...
fuente