Como lo prometido es deuda, a continuación os muestro ciertas reglas que intento seguir cuando estoy codificando un programa. Como cada uno es de su padre y de su madre, cada programador tiene su propio estilo de codificación. Lo importante de ésto no es tener un estilo u otro, sino ser consistente con el que se tenga. Al principio siempre cuesta un poco más adaptarse a unas reglas de estilo para la codificación de un programa, pero cuando se le coge el truco las ventajas son grandes.
Estas son las reglas que sigo:
Nombrado
- Por razones de internacionalización del código, todos los nombres se derivarán de palabras en inglés. Si la palabra es compuesta se utilizarán las reglas de construcción del inglés.
- Para los nombres de funciones que realicen acciones se seguirá la regla anterior pero colocando el verbo en primer lugar (e.g. vPrintTestHeader).
- Los nombres deben ser significativos y consistentes. En especial los nombres dados dentro de una clase han de construirse con una misma lógica y siguiendo unas mismas reglas.
- En general, los nombres compuesto se escriben juntos. poniendo en mayúsculas cada nombre simple (e.g. iRoomTemperature).
- Los nombres de variables y funciones empezará siempre con un prefijo que indique el tipo al que pertenecen (e.g. iGetRoomTemperature, stMyText). En el caso de objetos, se utilizará un sufijo siguiendo al carácter "_" (e.g. myInterface_mc).
- Los nombres de los datos miembro (atributos) estarán precedidos por m_ (e.g. m_nAirPresure).
- Las constantes se escribirán siempre en mayúsculas.
Control de flujo
- No modificar el valor de la variable de control de un for dentro del bloque for.
- Todas las primitivas de control de flujo (case, do, else, for, if, switch, while...) deben estar seguidas por un bloque, aunque éste esté vacío ({}).
- Las sentencias de cada case han de terminar obligatoriamente con una sentencia de terminación como return o breal. Excepcionalmente, y en el caso de que dos o más case ejecuten las mismas acciones podrán omitirse el break pero deberá existir un comentario que lo indique.
- Todos los switch han de contener obligatoriamente una cláusula default.
Sangrado
- No se pondrá nunca más de una sentencia por línea.
- Las partes diferenciadas del programa se separan utilizando líneas en blanco o comentarios.
- Ninguna función deberia ocupar más de 80-100 líneas. En caso contrario se procurará crear funciones auxiliares, para hacer más comprensible el programa.
- Cuando una sentencia dependa jerárquicamente de otra se reflejará en el programa encolumnándola con una pulsación del tabulador más a la derecha.
- Llaves: se abrirá una llave al final de la línea que define el bloque, el cual se cerrará encolumnando la llave final con el principio de esta línea. Por ejemplo:
C:
-
if (a <<30) {
-
...
-
}
Cuando existan llaves anidadas, se colocará un comentario en cada una de las llaves de cierre (}) para indicar cuál es el bloque que se cierra.
-
- Else: a continuación del } del if:
C:
-
if (a <<30) {
-
...
-
} else {
-
...
-
}
-
- Switch:
C:
-
switch (value) {
-
case 0: // Comentario
-
...
-
break;
-
case 1: // Comentario
-
...
-
break;
-
...
-
default: // Comentario
-
...
-
}
-
Paréntesis
- Dejar un blanco entre palabra clave y paréntesis (e.g. if (a << 10) {).
- No dejar blanco entre nombre de función y paréntesis (e.g. nRepSelectPlane(plane, 0);).
- No dejar blancos entre los paréntesis y sus contenidos.
Comentarios
- Comentarios tipo javadoc. Comienzan con los caracteres "/**", se pueden prolongar a lo largo de varías líneas (que probablemente comiencen con el caracter "*") y terminan con los caracteres "*/". Se colocan siempre al principio de cada clase, al principio de cada método y antes de cada variable de clase.
- Comentarios de línea. Comienzan con los caracteres "//" y terminan con la línea. Este tipo de comentarios se usará incluso cuando el comentario ocupe varias líneas, cada una de las cuales comenzará con "//". Se utilizan normalmente al principio de fragmento de código no evidente y a lo largo de los bucles.
- Comentarios tipo C. Comienzan con los caracteres "/*", se pueden prolongar a lo largo de varias líneas y terminan con los caracteres "*/". Se utiliza para eliminar código. Ocurre a menudo que código obsoleto no queremos que desaparezca, sino mantenerlo "por si acaso". Para que no se ejecute, se comenta (en inglés se suele denominar "comment out").
- Cuando un programa se modifica, los comentarios deben modificarse al tiempo, no sea que los comentarios acaben refiriéndose a un algoritmo que ya no utilizamos.
