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 (actúa como prefijo o sufijo) Autodecremento (actúa 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 |
- El significado de algunos operadores depende del tipo de datos sobre el que actúa Por ejemplo, en la expresión a + b el operador puede ser de suma (aritmético) si las variables a y b son de tipo numérico (int, long, etc.), o de concatenación si las variables a y B son Strings. (Los strings se verán en una lección posterior).
- Es importante observar que el operador de igualdad es distinto al operador de asignación que hemos ido viendo en lecciones anteriores. La asignación se hace con un símbolo =, y la operación de comparación por igual con dos: ==
- Los operadores relacionales producen siempre un resultado de tipo booleano, es decir true o false.
- Los operadores de autoincremento y autodecremento pueden actuar de distinta forma según estén colocados como prefijo o como sufijo. El ejemplo lo aclara:
int i = 0; int a = i++; // equivale a: a = i; i = i + 1; Primero se usa la variable y después se incrementa. int b = ++i; // equivale a: i = i + 1; b = i; Primero se incrementa la variable y después se usa.
- Los operadores de suma y asignación (igual que los de las otras operaciones básicas y asignación) actúan de la siguiente forma:
int b = 5; int i; i += b; // equivale a i = i + b;
- El operador condicional ?: es un operador terciario (Necesita tres expresiones). Su sintaxis es:
(expresión) ? valor_si_cierto : valor si falso
Ejemplo:
int a; int b = 5; a = (b == 1) ? 0 : b; // Si b vale 1 se asigna a a el valor 0. En caso contrario se asigna el valor de b.
Ejecución condicional
El formato general es:
if (expresion_booleana) bloque_de_código [else bloque_de_código]
bloque_de_código puede ser:
- Una sola sentencia.
- Un conjunto de sentencias separadas por ; y encerradas entre llaves, { y }:
{ sentencia1; sentencia2; . . . }
expresion_booleana es una expresión que se evalúa 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.
Las sentencias if pueden anidarse. Es decir, en el bloque de código correspondiente al if o al else (o a ambos), puede encontrarse otra sentencia if. Cuando esto se produce, puede ocurrir que sea difícil determinar a que else corresponde cada if. Para evitar esta fuente de errores se pueden usar las llaves {}, aunque sólo haya una sentencia en el bloque. Por ejemplo:
if (a == b) { if (a == c) { . . . } else { . . . } }
En el ejemplo el else corresponde al if más interno (expresión a == c). Si correspondiera al if más externo debería escribirse así:
if (a == b) { if (a == c) { . . . } } else { . . . }
Evaluación múltiple
La sentencia switch permite una evaluación múltiple, como si se encadenaran varias sentencias if . El formato es:
switch ( expresion ) {
case valor:
sentencias;
break;
case valor:
sentencias;
break;
. . .
default:
sentencias;
}
En la sentencia switch, expresión debe dar un resultado de uno de los tipos siguientes:
- Un valor numérico de tipo byte, short, int.
- Un caracter. Tipo char.
- Un String.
- Un tipo enumerado (Los tipos enumerados -enum- se verán más adelante).
Se ejecuta el bloque case cuyo valor coincida con el resultado de la expresión 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.
Ejemplo: Un método que devuelve el número de días del mes, que se pasa como parámetro:
int diasDelMes (int mes) { int nDias = 0; switch (mes) { case 2: nDías = 28; // para ser más precisos deberíamos conocer el año, para saber si es bisiesto. break; case 4: case 6: case 9: case 11: // Varios case consecutivos a los que se aplica el mismo bloque de código. nDias = 30; break; default: // valor por defecto nDias = 31; } return nDias; }
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.
Última actualización: 3/11/2016