Comentar o no comentar el código, esa es la cuestión

Este es un tema bastante polémico, según a quien consultes opinan de una manera u otra.

Hoy en día, es bastante común que varias personas trabajen bajo el mismo proyecto, leyendo, editando y refactorizando código ajeno. Leer código de otra persona suele ser una taréa bastante ardua, hay que ponerse en la piel de quien lo programó e intentar entender en qué estaba pensando cuando lo hizo.

Para ello es vital saber lo que está pasando en el código en todo momento, que hace tal o cual función, para que utiliza esa variables, por que utiliza tal clase y no aquella, entre otras cosas.

Muchos defienden que para que este proceso sea lo más eficiente y ameno, debe comentarse el código. Es una obligación para el programador comentar todo lo que programa. Lo oímos en las clases, nos lo tatúan a fuego en las practicas de la universidad. Se de compañeros que si no comentan su código, les suspenden (claro ejemplo de lo retrograda que es nuestra educación universitaria, como nos comentaba Osmary en otro blog).

Pues en mi humilde opinión, al igual que otro tantos expertos, si tienes necesidad de comentar tu código, es que no eres un buen programador.

Kernighan

Antes de que empecéis a sacar las hachas, dejar que os ponga un par de ejemplos.

public void clean(int[][] m, int i, int j){ for(int a;a < i;a++){ for(int b;b < j;b++){ m[a][b] = 0; } } }

Este es un ejemplo bastante sencillo, no hay que devanarse los sesos para ver que lo está haciendo la función. Resetear la matriz que pasamos por parámetro recorriendo todos las posiciones y poner todos sus valores a 0.

Según lo comentado antes, hay que comentar todo nuestro código, por lo que deberíamos dejarlo de la siguiente forma.

/** * This function reset the given matrix to 0; */ public void clean(int[][] m, int i, int j){ for(int a;a < i;a++){ for(int b;b < j;b++){ m[a][b] = 0; } } }

Bueno, pues tampoco hemos aportado demasiado, pero muchos ya estarán contentos, yo no.

Lo que os quiero explicar hoy, es que si programamos de manera inteligente no es necesario estos comentarios, e incluso sin ellos será más fácil de leer que como lo hemos hecho en los ejemplos anteriores.

Para hacer esto hay mil libros, donde nos enseñan como programar de manera inteligente. Si lo hacemos así, incluso leyendo nuestro propio código nos será más fácil detectar errores y editarlo, siendo entonces más productivos. En la mayoría de estos libros son defensores de que no hay necesidad de comentar código, si este está desarrollado de manera inteligente, usando nombres de funciones/clases autodescriptivos, que las variables tengan nombres legibles y que no tengamos que pensar demasiado para saber lo que está pasando.

Veamos como sería nuestra función, utilizando estas premisas.

public void resetMatrix(int[][] matrix, int rows_size, int columns_size){ for(int current_row ; current_row < rows_size ; current_row++){ for(int current_col ; current_col < columns_size ; current_col++){ matrix[current_row][current_col] = 0; } } }

Como veis, no tenemos que pensar ni adivinar, leyendo entendemos que es todo lo que está pasando en cada momento. Este es un ejemplo bastante sencillo y puede que no lo apreciéis demasiado, pero os lo aseguro por experiencia propia, que si os acostumbráis a desarrollar así, los comentarios poco a poco carecerán de sentido, incluso llegando a ser redundantes.

Os aconsejo que os leáis o al menos hojeéis algún libro sobre el tema. Yo os recomiendo Clean Code.

Rober C. Martin.

Conclusión:Desarrollar de esta manera no implica no utilizar nunca un comentario, simplemente no serán necesarios, esto no quita que en algún caso particular puede ser útil su utilización. No hay que ser radicales en esta vida.

MATIZACIÓN: Visto la que se ha revuelto en los comentarios me gustaría aclarar una cosa. Al margen del "título sensacionalista" del post, la tesis que defiendo en la publicación es "programa de tal manera que tu código no necesite ser comentado", en ningún momento veto la utilización de comentarios, pero sí digo que si tu código ¡¡NECESITA!! ser comentado para entenderse, es porque no está redactado adecuadamente.