Manual de estilo C / C++

[< anterior]       [indice]       [siguiente >]

9. Tipos de datos y enumeraciones

9. Tipos de datos y enumeraciones


9.1 Nomenclatura para tipos de datos y enumeraciones

  • Los nombres de los tipos de datos y enumeraciones tienen que ser autoexplicativos, descriptivos de su finalidad.

  • Para componer los nombres de los tipos de datos se utilizarán principalmente sustantivos, pudiendo calificarse con adjetivos.
    Esto se realizará así para mejorar la identificación de los distintos componentes de un sistema.

  • Los nombres de los tipos de datos se identifican con un prefijo T. Y el nombre se compone en minúsculas, pero con la primera letra de cada palabra en mayúsculas, sin separadores entre palabras.
    En vez del prefijo T se podría indicar un prefijo Tipo (o un sufijo Type si codificamos en inglés).
    Esta regla permite una clara identificación de las definiciones de tipos de datos.
    Por ejemplo, un tipo de dato para un flag caracter:
    typedef char TFlagFunc;

  • Las nombres de las enumeraciones se pueden identificar con un prefijo E. Y el nombre se compone en minúsculas, pero con la primera letra de cada palabra en mayúsculas, sin separadores entre palabras.
    En vez del prefijo E se podría indicar un prefijo Enum.
    Esta es otra regla pensada para la identificación clara de las enumeraciones frente a otros tipos de datos.
    Por ejemplo, se podría definir la siguiente enumeración para las notas de un examen:
    enum ENotaExamen {SUSPENSO, APROBADO, NOTABLE, SOBRESALIENTE};

[subir]

9.2 Utilización de tipos de datos y enumeraciones

  • Es aconsejable usar tipos definidos por el usuario en vez de tipos predefinidos.
    De esta manera mejoraremos en la claridad y comprensión del código.

    Por ejemplo, el siguiente tipo EBoole es más descriptivo que el tipo int como retorno de funciones:
    enum EBoole {FALSO, CIERTO};

  • No deben utilizarse tipos anónimos, ya que hacen el código ilegible y poco comprensivo.

    Por ejemplo, en vez de...
    // Uso (desaconsejado) de tipos anónimos de datos.
    enum {SUSPENSO, APROBADO, NOTABLE, SOBRESALIENTE} eNotaAlumno;

    Estaría mejor definir...
    // Definimos un tipo de dato ENotaExamen.
    enum ENotaExamen {SUSPENSO, APROBADO, NOTABLE, SOBRESALIENTE};
    ENotaExamen eNotaAlumno = APROBADO; // Definimos la variable para la nota

  • Se aconseja utilizar tipos de datos definidos con typedef para simplificar la síntaxis cuando se utilicen punteros a funciones.
    Por ejemplo el siguiente caso:
    #include <math.h>
    // Normalmente una forma de declarar punteros a funciones es la siguiente.
    // double ( *mathFunc ) ( double ) = sqrt;
    // Utilizando typedef simplificamos la síntaxis
    typedef double TMathFunc ( double );
     
    TMathFunc *mathFunc = sqrt;
    void main ()
     {
       // Podemos invocar la funcion de dos formas sencillas:
       double dValue1 = mathFunc( 23.0 ); // Forma sencilla
       double dValue2 = ( *mathFunc )( 23.0 ); // Forma complicada, desaconsejada
     }

  • Es preferible usar enumeraciones en vez de constantes #define para variables que pueden tomar valores en un rango muy limitado y conocido.

[subir]

9.3 Conversión de tipos de datos

  • Se deben evitar la conversión explícita de tipos de datos, ya que atenta contra la comprobación de de tipos de datos de los compiladores C y C++. Pudiendose tener problemas de ejecución.
    Lo aconsejable es utilizar implícitamente la conversión de tipos de datos, siempre que esto sea posible.

  • Nunca realizar la conversión de tipos const a tipos no-const. Esta practica errónea puede dar errores por que obliga al compilador a alojar constantes en la zona de las variables.

[subir]


[< anterior]       [indice]       [siguiente >] Oscar Valtueña García - "Manual de estilo C / C++"