martes, 12 de octubre de 2010

.: Escritura de Códigos :.

:: ¿Cómo escribir un código legible? ::



Materia. Lab de Leng de Progr

Hora. V1 (Jueves)

Hola de nuevo compañeros, para comenzar, quisiera hacer unos cuantos comentarios sobre este tema.
Por si no lo recuerdan (o mejor dicho, para los que lo vieron), en el post de mi blog sobre la clase del pseudocódigo de la Búsqueda Binaria en recursivo, hice comentarios alusivos al hecho de que la Dra. Elisa me hizo varias correcciones respecto a la escritura del código que desarrollamos.
Se supone que en la primera clase, vimos que una de las características de un lenguaje de programación es que debe ser claro y legible.
Vamos a ver un ejemplo:
En este programa, se captura un sueldo de un empleado, y dependiendo de la cantidad se eleva un cierto porcentaje.
Ahora bien, no es lo mismo leer esto:
#include <stdio.h>
int main(void)
{
    int s1,s2;
    char departamento [80], nombre[40];
    printf("\t\t\t\t**Computer 2007**");
    printf("\nNombre del empleado: ");
    scanf(" %[^\n]", &nombre);
    printf("\nDepartamento: ");
    scanf(" %[^\n]",&departamento);
    printf("\nSueldo Actual: $");
    scanf("%d",&s1);
    printf("\n\n\t\t\t**Informacion del empleado**");
    printf("\n\nNombre: %s", nombre);
    printf("\n\nSueldo Actual: $%d", s1);
    if(s1<=9000)
    {
          s2=(s1)*(20)/100 + s1;
          printf("\n\nAumento: 20 por ciento");
          printf("\n\nSueldo Nuevo: $%d",s2);
    }
    else
    {
        if(s1>9000 && s1<13000)
        {
            s2=(s1)*(10)/100 + s1;
            printf("\n\nAumento: 10 por ciento");
            printf("\n\nSueldo Nuevo: $%d",s2);  
        }
        else
        {
            if(s1>=13000 && s1<=18000)
            {
                  s2=(s1)*(5)/100 + s1;
                  printf("\n\nAumento: 5 por ciento");
                  printf("\n\nSueldo Nuevo: $%d",s2);       
            }
            else
            {
                if(s1>18000)
                {
                     s2=(s1)*(2)/100 + s1;
                     printf("\n\nAumento: 2 por ciento");
                     printf("\n\nSueldo Nuevo: $%d",s2);
                }
            }
        }
    }
    return 0;
}

A leer esto otro:

#include <stdio.h>

int main (void) {
    int s1,s2;
    char departamento [80], nombre[40];

    printf("\t\t\t\t**Computer 2007**");
    printf("\nNombre del empleado: ");
    scanf(" %[^\n]", &nombre);

    printf("\nDepartamento: ");
    scanf(" %[^\n]",&departamento);

    printf("\nSueldo Actual: $");
    scanf("%d",&s1);

    printf("\n\n\t\t\t**Informacion del empleado**");
    printf("\n\nNombre: %s", nombre);
    printf("\n\nSueldo Actual: $%d", s1);

    if (s1 <= 9000) {
             s2 = (s1) * (20) / 100 + s1;

            printf("\n\nAumento: 20 por ciento");
            printf("\n\nSueldo Nuevo: $%d",s2);
    } else if (s1 > 9000 && s1 < 13000) {
            s2 = (s1) * (10) / 100 + s1;

            printf("\n\nAumento: 10 por ciento");
            printf("\n\nSueldo Nuevo: $%d",s2);  
    } else if (s1 >= 13000 && s1 <= 18000) {
            s2 = (s1) * (5) / 100 + s1;

            printf("\n\nAumento: 5 por ciento");
            printf("\n\nSueldo Nuevo: $%d",s2);       
    } else if (s1 > 18000) {
            s2 = (s1) * (2) / 100 + s1;

            printf("\n\nAumento: 2 por ciento");
            printf("\n\nSueldo Nuevo: $%d",s2);
    }

    return 0;
}

¿A qué llego con esto? Como pueden apreciar, las líneas en blanco hacen una gran función para nosotros, y es precisamente facilitar la lectura y fácil comprensión de nuestros códigos.
Si se dan cuenta, es bueno agrupar sin saltos de línea los procesos similares, por ejemplo, pueden apreciar que los “printf” se encuentran uno tras otro sin brincar línea; mientras que después de un “scanf” se muestra una línea en blanco, pues después de esa línea vemos otro proceso distinto.
CASO PERSONAL.
Hace tiempo hice en equipo un código en segundo semestre que nos quedó un poco largo; al principio lo supe leer, pero ahora que de repente lo abrí me pierdo en la lectura. A continuación muestro una pequeña fracción de ese código:
if(x>Q->ID){
         P=(NODO*)malloc(sizeof(NODO));
         P->ID=x;
         printf("Nombre: ");
         scanf(" %[^\n]", &P->Name);
         conv(P->Name);
         scanf("%c", &residuo);
         printf("Facultad: ");
         scanf(" %[^\n]", &P->Facu);
         conv(P->Facu);
         scanf("%c", &residuo);
         printf("Carrera: ");
         scanf(" %[^\n]", &P->Carr);
         conv(P->Carr);
         scanf("%c", &residuo);
         printf("Semestre: ");
         scanf(" %d", &P->Sem);
         P->next=NULL;
         P->prev=Q;
         Q->next=P;
         Q=P;
     }

RECOMENDACIONES
1.   Agrupar procesos diferentes sin brincar líneas.
            s2 = (s1) * (20) / 100 + s1;

     printf("\n\nAumento: 20 por ciento");

2.   Colocar un espacio en blanco antes y después de los paréntesis, llaves y corchetes.

  if (s1 <= 9000) {

3.   Colocar espacios en blanco entre los signos de operación y regulares de cálculos matemáticos.

             s2 = (s1) * (5) / 100 + s1;

4.   El if podemos escribirlo así:
 if (condición 1) {
       Proceso;
 } else if (condición 2) {
       Proceso 2;
 }
CONCLUCIÓN
En realidad, los comentarios de arriba no son regla, pueden verlo como sólo unos consejos para escribir códigos en cualquier lenguaje.
La verdad es que la legibilidad de un código en algún lenguaje depende de la creatividad de cada programador para hacerlo fácil en cuestión de la lectura.
Cualquier comentario, observación o crítica es bienvenida.
Saludos a todos.


1 comentario: