15 de octubre de 2007

Falta de Estilo

Vamos a ver el código a comentar esta semana. Es un trozo muy pequeño y apenas necesita de presentación.

    if ( condition1 )
{
if ( condition2 )
Table[Index] = eValue1;
else
Table[Index] = eValue2;
}
else
Table[Index] = eValue3;

¿Que es lo que crítico a este trozo de código?. La falta de estilo. La falta de estilo al poner las llaves de bloque. Y no me refiero solo a escribir código de una manera elegante y distinguida. Sino que el autor no sigue una manera práctica y distinguible de escribir código. Es más, no sigue el manual de estilo establecido para el proyecto al que pertenece este trozo de código. ¿Que ha decidido? ¿Poner llaves cuando hay más de una linea de código en el bloque? Si ni siquiera son necesarias las llaves. Esta manera de escribir los bloques if..then ..else tarde o temprano causa errores.

El manual de estilo son unas normas muy especificas que todo programador debería tener a la hora de trabajar en un proyecto. Ya sean normas auto impuestas o impuestas por el propio proyecto. Sirven principalmente para ayudar a la lectura y el entendimiento del código escrito y para evitar introducir errores.

Mi solución
    if ( condition1 )
{
if ( condition2 )
{
Table[Index] = eValue1;
}
else
{
Table[Index] = eValue2;
}
}
else
{
Table[Index] = eValue3;
}

El código alternativo que propongo es bien simple. Lo primero, seguir un manual de estilo o guía de escritura de código. Y en el proyecto al que pertenece el código anteror, lo que dice el manual es bien simple, usa siempre llaves después de un if o un else. De esta manera tienes un problema menos del que preocuparte, andar mirando si tienes o no que poner llaves, y dedicas el tiempo a lo que de verdad importa, programar. Y también evitas el error de poner sentencias fuera del if sin desearlo.

Y si el autor del código criticado estaba realmente preocupado por ahorrar espacio, por escribir en el mínimo número de lineas posibles, pues lo preferible hubiese sido usar la asignación condicional de C/C++. Siempre que el manual de estilo te lo permita. Es, quizás, hasta más legible.

    if ( condition1 )
{
Table[Index] = condition2 ? eValue1 : eValue2;
}
else
{
Table[Index] = eValue3;
}

1 comentario:

Cristobal dijo...

Bueno si es por ahorrar linesya sería la ostia:


Table[Index] = condition1 ? condition2 ? eValue1 : eValue2 : evalue3;

Pero eso ya creo que no hay quien lo entienda :P