8 SENTENCIAS

8.1 Sentencias simples

Cada línea debe contener como mucho una sentencia. Ejemplo:

argv++; // Correcto
argc--; // Correcto
argv++; argc--; // EVITAR!

8.2 Sentencias compuestas

Las sentencias compuestas son sentencias que contienen listas de sentencias encerradas entre llaves “{sentencias }”

  • Las sentencias encerradas deben indentarse un nivel más que la sentencia compuesta.
  • La llave de apertura se debe poner al final de la línea que comienza la sentencia compuesta; la llave de cierre debe empezar una nueva línea y ser indentada al mismo nivel que el principio de la sentencia compuesta.
  • Las llaves se usan en todas las sentencias, incluso las simples, cuando forman parte de una estructura de control, como en las sentencias if-else o for. Esto hace más sencillo añadir sentencias sin incluir bugs accidentalmente por olvidar las llaves.

8.3 Sentencia return

Una sentencia return con un valor no debe usar paréntesis a menos que hagan el valor de retorno más obvio de alguna manera. Ejemplo:

return;
return miDiscoDuro.size();
return (tamanyo ? tamanyo : tamanyoPorDefecto);

8.4 Sentencias if, if-else, if else-if else

La clase de sentenciasif-else debe tener la siguiente forma:

if (condicion) {
    sentencias;
}
if (condicion) {
    sentencias;
} else {
    sentencias;
}
if (condicion) {
    sentencia;
} else if (condicion) {
    sentencia;
} else {
    sentencia;
}

Nota: Las sentencias if usan siempre llaves {}. Evitar la siguiente forma, propensa a errores:

if (condicion) //EVITAR! ESTO OMITE LAS LLAVES {}!
    sentencia;

8.5 Sentencias for

Una sentencia for debe tener la siguiente forma:

for (inicializacion; condicion; actualizacion) {
    sentencias;
}

Una sentencia for vacía (una en la que todo el trabajo se hace en las cláusulas de inicialización, condición, y actualización) debe tener la siguiente forma:

for (inicializacion; condicion; actualizacion);

Al usar el operador coma en la cláusula de inicialización o actualización de una sentencia for, evitar la complejidad de usar más de tres variables. Si se necesita, usar sentencias separadas antes de bucle for (para la cláusula de inicialización) o al final del bucle (para la cláusula de actualización).

8.6 Sentencias while

Una sentencia while debe tener la siguiente forma:

while (condicion) {
    sentencias;
}

Una sentencia while vacía debe tener la siguiente forma:

while (condicion);

8.7 Sentencias do-while

do {
    sentencias;
} wh## ile (condicion);

8.8 Sentencias witch

Una sentencia switch debe tener la siguiente forma:

switch (condicion) {
    case ABC:
        sentencias;
        /* este caso se propaga */
    case DEF:
        sentencias;
        break;
    case XYZ:
        sentencias;
        break;
    default:
        sentencias;
        break;
}

Cada vez que un caso se propaga (no incluye la sentencia break), añadir un comentario donde la sentencia break se encontraría normalmente. Esto se muestra en el ejemplo anterior con el comentario /* este caso se propaga */.

Cada sentencia switch debe incluir un caso por defecto. El break en el caso por defecto es redundante, pero prevee que se propague por error si luego se añade otro caso.

8.9 Sentencias try-catch

Una sentencia try-catch debe tener la siguiente forma:

try {
    sentencias;
} catch (ExceptionClass e) {
    sentencias;
}

Una sentenciatry-catch puede ir seguida de un finally, cuya ejecución se ejecutará independientemente de que el bloque try se haya completado con éxito o no.

try {
    sentencias;
} catch (ExceptionClass e) {
    sentencias;
} finally {
    sentencias;
}