AjLearning
AjLearning 0.1    





Introducción a Java - La sentencia if-else

Curso Introducción a Java

    Anterior     Siguiente

En Java, como en la vida, llega el momento de tomar decisiones, y en base a una elección, ejecutar una u otra acción. Para conseguir esto, tenemos la construcción if.

Estudiemos la siguiente estructura:

if (<expresión booleana>) <sentencia simple>; Como apuntamos, podemos tener también un bloque de sentencias:
if (<expresión booleana>) { <sentencia>; <sentencia>; ... <sentencia>; } Agrupamos las sentencias a ejecutar entre llaves.

Nota: En nuestros ejemplos, colocaremos la llave que abre el bloque en el mismo renglón que la sentencia if. Es sólo una convención. Ud. puede adoptar otras, como poner la apertura del bloque en la línea que sigue inmediatamente al if. Es cuestión de estilos. Igualmente, recomendamos adoptar UN estilo, y aplicarlo en todos nuestros códigos.

Por ejemplo:
if (valor != 0) inverso = 1/valor; if (cantidad<=0) { System.out.println("Cantidad insuficiente"); return; }
La expresión que se encierra entre paréntesis, debe dar como resultado un valor booleano, de true o false (verdadero o falso). Esto marca una diferencia con respecto al lenguaje C/C++ (y con otros lenguajes), donde la expresión puede ser de cualquier tipo, y se da como falsa si resulta 0 o null. Java, en cambio, nos protege de esa ambigüedad. En
C/C++ sería válido:
if (k=5) { // Válido en C/C++, inválido en Java ... } Esa expresión es asignar 5 a la variable x, y como vale 5, que es verdadero en C. Este tipo de sentencias, trae problemas en C, donde el programador podría haber querido poner otra cosa, como comparar x por igual a 5. En Java, esa posible equivocación, no existe. De nuevo notamos el cuidado de los diseñadores del lenguaje, en aislarnos de los posibles problemas que puedan surgir del uso de ciertas expresiones.

Recordemos entonces los operadores de comparación de valores primitivos o referencias:
> Mayor que < Menor que >= Mayor o igual que <= Menor o igual que == Igual != Distinto Hay que recordar entonces, que para comparar por igual, en Java se usa el doble igual. Como en otros lenguajes, Java distingue explícitamente entre el operador de asignación = y el operador de comparación ==

Tenemos que tener presente que esos operadores tienen baja recedencia. Se evalúan luego de otros operadores de mayor precedencia. Así
a + b == x + y se evalúa como
(a + b) == (x + y) Si tenemos que combinar comparaciones o expresiones lógicas, tenemos los operadores
& Y lógico | O lógico && Y condicional || O condicional Los operadores & y | que habíamos estudiado en las operaciones de bits, también se aplican a valores booleanos. La diferencia que tienen con los operadores && y ||, es que éstos permiten no evaluar alguna de los operandos. Por ejemplo, en el siguiente comando
if (k!=0 && 1/k>0) { ... } si k resulta ser cero, no se evalúa la segunda condición, porque la primera ya dió falso. Esto permite evitar el dividir por 0. Lo mismo pasa con el operador ||. Si su primer operando resulta falso, no se evalúa el segundo.

Existe otra estructura if con else:
if (<expresión booleana>) <sentencia 1> else <sentencia 2> Ejemplos con else:
if (valor > 1) return valor * calcularFactorial(valor-1); else return 1; .... if (peso<=0) { System.out.println("Peso inválido"); peso=0; } else calcularFuerza(peso); ... if (comando.equals("poner") { escribirLog("Ejecutando poner"); poner(valor); } else if (comando.equals("sacar") { escribirLog("Ejecutando sacar"); sacar(valor) ; } else escribirLog("Comando desconocido"); En estos ejemplos vemos el uso de if sin else, el uso de bloques como sentencias, y el uso de un if como sentencia del else de otro if, construcción perfectamente válida, pues un if es una sentencia como cualquier otra, y puede escribirse en donde se pueda poner una sentencia.

Nota: Estudiaremos en un próximo capítulo el manejo de String. Son objetos de la clase java.lang.String, y no utilizan los operadores de comparación, como en otros lenguajes. Por eso, en el ejemplo
if (comando.equals("poner")) se usó el método equals para comparar una variable del tipo String comando, con la constante "poner".

Usando los operadores lógicos la expresión a examinar puede ser todo lo compleja que se quiera, compuesta de otras más simples y de llamadas a otras funciones, como:
if (valor<0 || esInvalido(valor)) ponerError("Valor no válido") ; Escribir un if no implica ningún formato en especial: no necesariamente se escribe en una línea el if y en otra la sentencia o el else. Java es un lenguaje que puede escribirse de corrido, si uno quisiera, como en:
if (comando.equals("salir")) return; Nosotros decidimos la forma de escribirlo.

Programado por Angel J. Lopez www.ajlopez.com