Guía de Estilo de PASCAL


Ingeniería Informática

Seminario de Programación
Departamento de Informática


GUÍA DE ESTILO DE PASCAL

1. Introducción

Este documento tiene como finalidad proporcionar un conjunto de reglas que nos ayuden a escribir programas en Pascal con un "buen estilo". Un código escrito con buen estilo es aquel que tiene las siguientes propiedades:

Hay muchos estilos que cumplen estas características. En este documento simplemente vamos a dar uno de ellos. Este documento es una versión resumida y adaptada de la guía de estilo para C de Juan José Moreno Moll (http://bugs/guia/asignatu/EDS/9697/ESTILO/estilo20.html)

2. Lectura y mantenimiento del código

Los principios de esta sección sirven para aumentar la legibilidad del código y para facilitar su mantenimiento. Éstos son:

2.1. Encapsulación y ocultación de información

La encapsulación y ocultación de información ayudan a organizar mejor el código y evitan el acoplamiento entre funciones del código.

La encapsulación permite agrupar elementos afines del programa. Los subprogramas afines se agrupan en ficheros (unidades), y los datos en grupos lógicos (estructuras de datos).

Ocultación de información: Un subprograma no necesita saber lo siguiente:

Para conseguir esto se deben seguir las siguientes reglas:

2.2. Uso de comentarios

Los comentarios dan información sobre lo que hace el código en el caso que no sea fácil comprenderlo con una lectura rápida. Se usan para añadir información o para aclarar secciones de código. No se usan para describir el programa. Por lo tanto no se deben poner comentarios a una sola instrucción. Los comentarios se añaden en los niveles siguientes:

Los comentarios se pueden escribir en diferentes estilos dependiendo de su longitud y su propósito. En cualquier caso seguiremos las siguientes reglas generales:

Aquí vamos a describir como hacer comentarios dentro del código. Dentro de este tipo de comentarios se pueden distinguir:

Comentarios en cajas:

Ejemplo: comentario tipo prólogo en una caja:

    (*************************************************************)
    (*      AUTOR: Nombre                                        *)
    (*                                                           *)
    (*      PROPOSITO:                                           *)
    (*                                                           *)
    (*************************************************************)

Separador de secciones:

Ejemplo: Separador de secciones.

    (**********************************************************)

Comentarios para bloques grandes:

Ejemplo: comentarios para bloques grandes de código.

    (*
     * Usar para comentarios a mas de un bloque de
     * sentencias.
     *)

Comentarios cortos:

En caso de utilizar este tipo de comentario, seguir las siguientes reglas:

Ejemplo: Comentarios en un bloque de datos.

    CONST
        MaxTeoria = 120; (* Maximo de alumnos por grupo teoría *)
        MaxPracticas = 24; (*Maximo de alumnos por grupo prácticas*)

Ejemplo: Comentarios al final de una estructura.

    FOR I := 1 TO Final DO
    BEGIN
        WHILE NOT(Correcto) DO
        BEGIN
            Correcto := FALSE;
            write('Introduce dato:');
            readln(Dato);
            IF Dato < 100 THEN
                Correcto := TRUE
        END; (* WHILE *)
        writeln
    END; (* FOR *)

Comentarios para bloques pequeños:

Ejemplo:

    (* Hallamos la nota media de todos los examenes *)
    FOR i := 1 TO NumAlumnos DO
        Suma := Suma + Nota[i];
    Media := Suma / NumAlumnos;

2.3. Uso de espacios y líneas en blanco

Los espacios en blanco facilitan la lectura y el mantenimiento de los programas. Los espacio en blanco que podemos utilizar son: líneas en blanco, carácter espacio, sangrado.

Línea en blanco:

Se utiliza para separar "párrafos" o secciones del código. Cuando leemos un programa entendemos que un fragmento de código entre dos líneas en blanco forma un conjunto con una cierta relación lógica.

Veamos como separar secciones o párrafos en el programa:

Espacio en blanco:

Los espacios en blanco sirven para facilitar la lectura de los elementos que forman una expresión. Los espacios en blanco se utilizan en los casos siguientes:

Ejemplos:

Espaciado correcto:

    Media := Suma / Cuenta;

Espaciado incorrecto:

    Media:=Suma/Cuenta;

Espaciado dentro de una lista de parámetros:

    concat(s1, s2)

Sangrado:

El sangrado se utiliza para mostrar la estructura lógica del código. El sangrado óptimo es el formado por cuatro espacios. Es un compromiso entre una estructuración legible y la posibilidad de que alguna línea (con varios sangrados) del código supere el ancho de una línea de una hoja de papel o del monitor.

2.4. Elección adecuada de identificadores

Los identificadores que dan nombre a subprogramas, constantes, tipos o variables han de colaborar a la autodocumentación del programa, aportando información sobre el cometido que llevan a cabo. Para elegir nombre se deben seguir las siguientes recomendaciones generales:

Nombres habituales:

Hay algunos nombres cortos que se usan muy habitualmente. El uso de estos nombres (y sólo de estos) es aceptable.

Ejemplo: nombres cortos aceptables.

    c, ch   caracteres
    i, j, k indices
    n       contadores
    p, q    punteros
    s, Cad  cadenas

3. Organización interna

En este apartado vamos a describir la forma correcta de escribir ciertas estructuras del lenguaje.

Declaraciones:

Las palabras reservadas CONST, TYPE y VAR deben comenzar en la misma columna de la cabecera y los elementos declarados se sangrarán a una misma columna. Las declaraciones deben seguir las siguientes reglas:

Como excepción a esta regla podemos agrupar en la misma línea variables auxiliares, contadores, etc.

Pares BEGIN-END:

La forma que tiene Pascal de agrupar instrucciones en bloques es utilizar los parentizadores BEGIN-END. Su colocación se debe hacer en líneas reservadas para cada uno de ellos, sin ninguna otra instrucción en esa línea. Ambos deben ir en la misma columna que la instrucción de la que dependen.

Ejemplo:

    FOR i := 1 TO N DO
    BEGIN
        Vect[i] := Vect2[i];
        Suma := Suma + Vect[i]
    END

Sentencia IF:

La sentencia o sentencias después de THEN y ELSE van siempre en una nueva línea sangrada:

    IF expresión THEN
        sentencia
    ELSE
        otra_sentencia;
IF expresión THEN
BEGIN
    sentencia1;
    sentencia2
END
ELSE
BEGIN
    otra_sentencia1;
    otra_sentencia2
END;

Sentencia CASE:

Los valores asociados a la sentencia CASE irán en línea aparte sangrada. El bloque de sentencias asociado comenzará en la misma línea a continuación del valor. Todos los bloques de sentencias pertenecientes al CASE comenzarán en la misma columna.

    CASE expresión OF
        1   : BEGIN
                  sentencia1;
                  sentencia2
              END;
        2, 3: otra_sentencia
    END;

Sentencias de repetición:

La sentencia o sentencias pertenecientes a la estructura de repetición (sentencias después del DO o REPEAT) van siempre en una nueva línea sangrada:

    WHILE expresión DO
        sentencia;
WHILE expresión DO
BEGIN
    sentencia1;
    sentencia2
END;

4. Portabilidad y eficiencia

Un código bien escrito debe poder ejecutarse en otras máquinas o plataformas haciendo un mínimo de cambios. Nuestro código debe ser lo más portable posible.

Reglas para mejorar la portabilidad:

Reglas para mejorar la eficiencia: