Estilos de codificación (Carlos Fontela)

Como dije en otro artículo, no hay mejor documentación interna que el propio código. No hay comentario que arregle un código ilegible, y la legibilidad es un atributo de calidad de primer orden.
Esto es así porque, en la mayoría de los casos, un programa se lee muchas más veces de las que se lo edita. Por eso, debemos entender que programar es mucho más una tarea de comunicación con otras personas que una comunicación con una computadora.

Por todo eso es importante respetar estándares de codificación – oficiales o no, pero que se siga un estándar – y lograr que la estructura del código fuente refleje la estructura lógica del programa.

En primer lugar, si lo que queremos es comunicarnos con otras personas, deberíamos seguir las recomendaciones que desde hace siglos existen sobre cómo escribir bien.
Por ejemplo, cuando escribimos un libro, utilizamos un sinnúmero de ayudas para el lector: espacios en blanco, signos de puntuación, sangrías, renglones en blanco, títulos de distintos niveles, paréntesis, etc. Con todo esto tratamos de que el lector capte el sentido de lo que queremos decir.
Cuando escribimos programas también podemos utilizar este tipo de ayudas al lector, y de hecho es conveniente que lo hagamos. Tenemos ayudas posibles como sangrías, paréntesis innecesarios pero convenientes, nombres claros, líneas en blanco, separación de partes con caracteres especiales, encabezados de módulos de distintos niveles, etc.

Otra cosa que podemos hacer es contextualizar lo que escribimos, separando adecuadamente niveles de lectura.
En estas condiciones, la parte de más alto nivel de un programa no tiene que tener detalles de implementación de bajo nivel. Por ejemplo, tipos como ArrayList no deberían llegar hasta las clases de más alto nivel. Éstas deben ser, en la medida de lo posible, clases conceptuales, tomadas del dominio del problema.
Lo ideal es mantener distintos niveles de abstracción y programar en cada uno según el dominio de ese nivel. Desde ya que la POO ayuda mucho con su idea del encapsulamiento.

En línea con lo anterior, utilicemos la organización de archivos para emprolijar nuestro código fuente. La práctica habitual es que cada clase va en un archivo que lleva su nombre. En C++ se suele separar un archivo de encabezado. También hay recomendaciones sobre las extensiones utilizadas. Si respetamos estas reglas haremos más sencilla la búsqueda de fuentes en un sistema mediano.

En otro orden de cosas, no trabajemos como si nos multaran por cada carácter de más en nuestros fuentes, que luego sólo pueden leer extraterrestres. Por ejemplo, los lenguajes derivados de C se prestan mucho para escribir programas compactos. La gran mayoría de los programadores C está acostumbrado a escribir y a leer estos programas.
Notemos que el fragmento que sigue:

for (ini = 0, fin = n; ini<fin && capicua ;ini++, fin–)
capicua = (s[ini] == s[fin]);

Se puede escribir en código más compacto (pero menos claro) así:

for (ini = 0, fin = n; ini<fin && (capicua = (s[ini] == s[fin])) ;ini++ ,fin–)
;

Donde el ciclo for ha quedado vacío.
Recordemos, para no caer en código ilegible, que la legibilidad de un programa es inversamente proporcional a lo compacto de su escritura.

Una cuestión que a veces no queda clara de la lectura del nombre de algunas variables es la unidad en la que están expresados los valores. Por ejemplo, si tengo una variable precio, ¿contendrá el monto en pesos o en reales? Y esta distancia, ¿estará en centímetros o en milímetros?
Una buena práctica es incluir la unidad en el nombre, como en precioEnPesos o distanciaEnMm.

Y, en líneas generales, conviene utilizar algoritmos legibles, métodos cortos, buenos nombres, constantes y no valores, no usar nombres con más de un fin y evitar anidaciones excesivas.

Una buena modularización ayuda también. En el caso de aplicaciones medianas o grandes es ilusorio pretender mirar todo el código, con lo cual la abstracción en métodos, clases y paquetes de nombres claros, o basados en patrones conocidos, es de gran ayuda.

Advertisement

Etiquetas: , ,

5 comentarios para “Estilos de codificación (Carlos Fontela)”

  1. Cristian Dice:

    En este libro? que libro? Lo esperamos!

    En los nombres de variables tambien se pueden agregar las iniciales del alcance (Public, Privado, Local, etc) y el tipo de variable (char, integer, float, etc).

    Excelente la aclaración de que el código es mas una comunicacion entre personas que entre persona-maquina.

    Saludos

    • cysingsoft Dice:

      Gracias Cristian, copié un párrafo de mi libro “Orientación a objetos – diseño y programación”, y se me pasó revisarlo. Ya está corregido.

  2. Cristian Dice:

    Carlos

    Que opinas sobre el uso de templates para codificar? Por ejemplo, armar una plantilla para escribir una funcion, un procedure, una clase, etc., de acuerdo al lenguaje de que se trate.
    Se podrían establecer guías a completar por el grupo de trabajo, ayuda memoria para comentar, etc.

    Hay que tener en cuenta que, además de los motivos que mencionás, muchos creen que los comentarios no son necesarios, porque al momento de escribir el código éste es muy claro para el mismo programador. Esto no evita, que pasado el tiempo, el código se vuelva dificil de leer hasta para él mismo. Y volvemos a la frase de que el código es comunicación entre personas.

    Gracias
    Saludos

    • cysingsoft Dice:

      Crisitian

      Los templates pueden ser una buena idea, tanto para un programador principiante, como para mantener consistencia de comentarios en un grupo de trabajo.
      Hay varios IDE que generan templates automáticamente, e incluso se pueden modificar. Eclipse, Netbeans, Visual Studio, generan algo de eso, y no es mala idea usarlos.
      Lo que sí, eso no libera de la cuestión de ser juicioso a la hora de escribir comentarios: ni de más (lo cual suele ocultar problemas de legibilidad en el código), ni de menos (lo que suele ocultar la pereza del programador).

      Saludos y gracias

  3. Legibilidad de código (Carlos Fontela) « CyS Ingeniería de Software Dice:

    [...] CyS Ingeniería de Software El blog del área de Ingeniería de Software de CyS informática s.a. « Estilos de codificación (Carlos Fontela) [...]

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s


Seguir

Get every new post delivered to your Inbox.