Bienvenidos sean a este post, en el post de hoy veremos los dos tipos de condicionales que poseemos en Java.
Los condicionales son en conjunto con los bucles dos de las piedras fundacionales para permitir que nuestros programas sean algo mas que un simple secuenciador de lineas, si bien como vimos anteriormente un bucle nos permite repetir una accion la cantidad de veces que consideremos necesarias sin necesidad de repetir el bloque, en el caso de los condicionales nos permitira que nuestros programas tomen decisiones en base a la informacion que reciben, es decir que con estos metodos podremos dotar de cierta «inteligencia» a nuestros codigos pero sin mas preambulos pasemos al primer y mas basico condicional.
if
Este es el condicional mas basico, pero no menos poderoso, y mas universal que podras encontrar en cualquier lenguaje, este realmente trabaja de la misma forma en todos y cada uno de los lenguajes de programacion existente, veamos primero su sintaxis:
if (condicion) { ... instrucciones ... }
Este es su formato mas basico, donde primero tendra una condicion ha verificar, si se cumple o es verdadera (true) procede a ejecutar el bloque de instrucciones en su bloque, tal como vimos en el post anterior, por ejemplo veamos la siguiente condicion:
if (respuesta == "s")
{
System.out.println("Gracias por elegirlo");
}
Vamos a suponer esta situacion, le solicitamos al usuario que ingrese un valor y lo asignamos a la variable respuesta el valor, si ingresamos el valor «s» nos devolvera un mensaje en la consola, pero que pasa si ingresamos otro valor? Nada y esto puede generar una conducta inapropiada para nuestro programa, para estos casos usaremos a else, modifiquemos el caso anterior de esta forma:
if (respuesta == "s")
{
System.out.println("Gracias por elegirlo");
}
else
{
System.out.println("Una pena");
}
En este caso despues del condicional agregamos un else y despues un bloque donde mostraremos un mensaje en pantalla, en este caso si cubriremos otra respuesta y obtendremos una accion pero que sucede si ingresamos un valor de «S» en lugar de «s»? nos devolvera el segundo mensaje porque no coincide con el primer condicional, y esta conducta tampoco es apropiada, para ello entra en accion el siguiente modificador:
if (respuesta == "s" || respuesta == "S")
{
System.out.println("Gracias por elegirlo");
}
else if(respuesta == "n" || respuesta = "N")
{
System.out.println("Una pena");
}
else
{
System.out.println("Debes ingresar una opcion correcta!!!");
}
En este caso tenemos a else if, este nos permitira tener otra condicion a evaluar, otra modificacion que hicimos es utilizar un operador logico OR (||), en el cual verificara si respuesta tiene el valor «s» o «S» si se cumple cualquiera de las dos condiciones devuelve un mensaje, en la siguiente condicion (else if) verifica si respuesta es igual a «n» o «N», en caso de cumplirse una de las condiciones nos devuelve otro mensaje, y ahora else se transformo en una opcion para mostrar un mensaje cuando no elegimos una opcion correcta, es decir que el valor no es «s» o «n», veamos la sintaxis final de este condicional:
if (condicion) { ... instrucciones ... } else if (condicion1) { ... instrucciones ... } else if (condicion2) { ... instrucciones ... } ... else if (condicionN) { ... instrucciones ... } else { ... instrucciones ... }
Siempre comienzan con el if y la condicion, luego podremos poner todos los else if con las condiciones para cada uno, y por ultimo cerramos siempre con un else y este al igual que el primero es unico, la primera condicion siempre sera el puntapie inicial, en medio podemos verificar otras condiciones y el else se usa para cuando no se cumple ninguna de las condiciones anteriores, pasemos al siguiente condicional.
switch
El condicional anterior tiene un defecto, no es recomendable usar muchas condiciones ya sea mediante multiples if o mediante else if, por ejemplo vamos a suponer que tenemos un programa que tira un dado el cual genera un numero al azar entre 1 y 6, una vez generado podemos usar el siguiente bloque para saber que numero salio:
if (numero==1)
System.out.println("Salio el numero 1");
if (numero==2)
System.out.println("Salio el numero 2");
if (numero==3)
System.out.println("Salio el numero 3");
if (numero==4)
System.out.println("Salio el numero 4");
if (numero==5)
System.out.println("Salio el numero 5");
if (numero==6)
System.out.println("Salio el numero 6");
En esta serie de condiciones evalua paso a paso si se cumple alguna de las condiciones procede a ejecutar el bloque correspondiente, si bien este codigo es completamente funcional tiene un defecto muy importante, por mas que se cumpla la condicion seguira evaluando las condiciones restantes, esto implica un desperdicio de ciclos de computadora de forma innecesaria, para evitar esto existe el metodo switch, tomemos el codigo anterior y modifiquemos el bloque de la siguiente forma:
switch(numero)
{
case 1:
System.out.println("Salio el numero 1");
break;
case 2:
System.out.println("Salio el numero 2");
break;
case 3:
System.out.println("Salio el numero 3");
break;
case 4:
System.out.println("Salio el numero 4");
break;
case 5:
System.out.println("Salio el numero 5");
break;
default:
System.out.println("Salio el numero 6");
break;
}
El switch recibe la variable a evaluar, despues por medio de case le pasaremos los distintos valores que pueda tomar la variable numero, en este caso evaluamos del 1 al 5 y en cada case mostramos un mensaje relacionado a ese valor y para salir de cada case usamos a break para salir del mismo, si notaron dijimos de 1 a 5 y no mencionamos el valor 6, para este caso usamos a default, este equivale a else en if porque cuando no se cumpla ninguna de las condiciones anteriores ejecutara una accion y en este caso entra el valor de 6, si se preguntan cual es la ventaja con respecto al ejemplo anterior, cuando se cumple una de las condiciones automaticamnte sale del condicional sin necesidad de desperdiciar ciclos de la computadora, la sintaxis de switch es la siguiente:
switch (variable)
{
case valor1:
... instrucciones ...
break;
case valor2:
... instrucciones ...
break;
case valor3:
... instrucciones ...
break;
...
case valorN:
... instrucciones ...
break;
default:
... instrucciones ...
break;
}
En este caso siempre comienza con un switch y la variable a evaluar, despues en cada case le asignaremos uno de los posibles valores que puede tomar y que nos interese interceptar, dentro de cada case iran todas las instrucciones necesarias y siempre ese case termina con un break, como pueden ver podemos usar todos los cases necesarios por nosotros, al igual que else if, y siempre al final y solo una vez va el default, este solamente actuara cuando todo lo anterior falle, al igual que else, con esto cubrimos los dos condicionales.
Si se lo preguntan, este condicional no reemplaza al anterior sino actua como complemento porque en este condicional no podemos evaluar posibles valores atraves de condiciones, es decir en los case no podemos usar ningun operador relacional o logico, solamente valores de cualquier tipo de dato, en los case podemos usar un condicional if y dentro de un if podemos usar un switch, tambien se pueden anidar pero esto es poco recomendable, veamos algunas conductas que debemos evitar:
- Evitar el uso de excesivos if para evaluar multiples condiciones, para eso usen los operadores logicos o relacionales.
- Evitar el uso de if para evaluar multiples valores si se puede reemplazar con un switch
- Eviten anidar muchos else if o if en las condiciones para no volver ilegible al codigo
Si bien en algunas circunstancias sera inevitable, traten de reducir al maximo posible las condiciones porque esto puede llevar a un tipo de error logico que puede cambiar la conducta de nuestro codigo sin que nos demos cuenta.
En resumen, hoy hemos visto los condicionales de Java, como trabajan, para que se usan, cuales son sus diferencias, como sus sintaxis y todas las posibilidades que nos posibilitan, tambien hemos los pros y contras de usarlo, y como en un futuro no muy lejano veremos como nos ayudaran en nuestros programas, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.