Apuntes Lenguaje Java

8. Control de la ejecución

8.1. Resumen de operadores
8.2. Ejecución condicional
8.3. Iteraciones con while
8.4. Iteraciones con for
8.5. Evaluación múltiple
8.6. Devolución de control
8.7. Expresiones 

8.1. Resumen de operadores

La siguiente tabla muestra un resumen de operadores clasificados por grupos:

Grupo de operador Operador Significado
Aritméticos +
-
*
/
%
Suma
Resta
Multiplicación
División
Resto
Relacionales >
>=
<
<=
==
!=
Mayor
Mayor o igual
Menor
Menor o igual
Igual
Distinto
Logicos &&
||
!
AND
OR
NOT
A nivel de bits &
|
^
<<
>>
>>>
AND
OR
NOT
Desplazamiento a la izquierda
Desplazamiento a la derecha rellenando con 1
Desplazamiento a la derecha rellenando con 0
Otros +
++
--
=
+=
-=
*=
/=
?:
Concatenación de cadenas
Autoincremento (actua como prefijo o sufijo)
Autodecremento (actua como preficjo o sufijo)
Asignación
Suma y asignación
Resta y asignación
Multiplicación y asignación
División y asignación
Condicional

8.2. Ejecución condicional

El formato general es:

if (expresion_booleana)
    sentencia
[else
    sentencia]

sentencia (a todo lo largo de este capítulo) puede ser una sola sentencia o un bloque de sentencias separadas por ; y enmarcadas por llaves { y }. Es decir

if (expresion_booleana) {
    sentencia;
    sentencia;
    . . .
}
else {
    sentencia;
    sentencia;
    . . .
}

expresion_booleana es una expresión que se evalua como true o false (es decir, de tipo booleano). Si el resultado es true la ejecución bifurca a la sentencia que sigue al if . En caso contrario se bifurca a la sentencia que sigue al else.

Los corchetes en el formato anterior indican que la clausula else es opcional.

8.3. Iteraciones con while

Sintaxis formato 1:

while (expresion_booleana)
    sentencia

Sintaxis formato 2:

do
    sentencia
while (expresion_booleana)

La sentencia o bloque se sentencias (se aplica la misma idea que para el if-else) se ejecuta mientras que la expresion_booleana se evalue como true

La diferencia entre ambos formatos es que en el primero la expresión se evalua al principio del bloque de sentencias y en el segundo se evalua al final.

8.4. Iteraciones con for

El formato es:

for ( inicializacion ; expresion_booleana ; step )
    sentencia

inicializacion es una sentencia que se ejecuta la primera vez que se entra en el bucle for . Normalmente es una asignación. Es opcional.

expresion_booleana es una expresión que se evalua antes de la ejecución de la sentencia, o bloque de sentencias, para cada iteración. La sentencia o bloque de sentencias se ejecutan mientras que la expresion_booleana se evalue como cierta. Es opcional.

step es una sentencia que se ejecuta cada vez que se llega al final de la sentencia o bloque de sentencias. Es opcional.

Una utilización clásica de un bucle de tipo for se muestra a continuación para evaluar un contador un número fijo de veces:

for ( int i = 1 ; i <= 10 ; i++ )
    sentencia

La sentencia (o bloque de sentencias) se evaluará 10 veces. En cada ejecución (pasada) el valor de la variable i irá variando desde 1 hasta 10 (inclusive). Cuando salga del bloque de sentencias i estará fuera de su ámbito (porque se define en el bloque for).

Si se omiten las tres clausulas del bucle se obtiene un bucle infinito:

for ( ; ; )
    sentencia

Obsérvese que se pueden omitir las clausulas pero no los separadores (;).

8.5. Evaluación múltiple

El formato es:

switch ( expresion_entera ) {
    case valor_entero:
        sentencia;
        break;
    case valor_entero:
        sentencia;
        break;
        . . .
    default:
        sentencia;

Cuidado: en el switch la expresión que se evalua no es una expresión booleana como en el if-else, sino una expresión entera.

Se ejecuta el bloque case cuyo valor coincida con el resultado de la expresión entera de la clausula switch . Se ejecuta hasta que se encuentra una sentencia break o se llega al final del switch .

Si ningún valor de case coincide con el resultado de la expresión entera se ejecuta el bloque default(si está presente).

default y break son opcionales.

8.6. Devolución de control

El formato es:

return valor

Se utiliza en los métodos para terminar la ejecución y devolver un valor a quien lo llamó.

valor debe ser del tipo declarado en el método.

valor es opcional. No debe existir cuando el método se declara de tipo void. En este caso, la claúsula return al final del método es opcional, pero puede usarse para devolver el control al llamador en cualquier momento.

8.7. Expresiones

La mayor parte del trabajo en un programa se hace mediante la evaluación de expresiones, bien por sus efectos tales como asignaciones a variables, bien por sus valores, que pueden ser usados como argumentos u operandos en expresiones mayores, o afectar a la secuencia de ejecución de instrucciones. 

Cuando se evalua una expresión en un programa el resultado puede denotar una de tres cosas:

bulletUna variable. (Si por ejemplo es una asignación)
bulletUn valor. (Por ejemplo una expresión aritmética, booleana, una llamada a un método, etc.)
bulletNada. (Por ejemplo una llamada a un método declarado void)

Si la expresión denota una variable o un valor, entonces la expresión tiene siempre un tipo conocido en el momento de la compilación. Las reglas para determinar el tipo de la expresión varían dependiendo de la forma de las expresiones pero resultan bastante naturales. Por ejemplo, en una expresión aritmética con operandos de diversas precisiones el resultado es de un tipo tal que no se produzca pérdida de información, realizandose internamente las conversiones necesarias. El análisis pormenorizado de las conversiones de tipos, evaluaciones de expresiones, etc, queda fuera del ámbito de estos apuntes. En general puede decirse que es bastante similar a otros lenguajes, en particular C, teniendo en cuenta la característica primordial de Java de tratarse de un lenguaje con control fuerte de tipos. 

Antonio Bel Puchol - antonio@abelp.net