Bienvenidos sean a este post, hoy veremos al condicional universal por excelencia.
Por que lo llamamos el condicional universal? Por la simple razon de que esta en todo lenguaje de programacion. Podra variar levemente su sintaxis pero se utiliza para lo mismo en cada uno de ellos. Este condicional tiene la particularidad de que nos dara la capacidad de poder brindar razonamiento a nuestros codigos. Es decir, la posibilidad de volverlos «inteligentes» para que tomen decisiones en base a distintas condiciones. Veamos como es su sintaxis basica:
if (condicion) {
... instrucciones ...
}
Siempre ira con el if primero y entre parentesis pasaremos la condicion que evaluara. En caso de cumplirse, la condicion devuelve un true, procede a trabajar con las instrucciones del bloque de lo contrario lo ignora. Pasemos a analizar un ejemplo para verlo en accion. Para ello crearemos un nuevo archivo con el nombre de cond.cpp y le agregaremos el siguiente codigo:
#include <iostream>
int main()
{
char rta;
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
if (rta == 's') {
std::cout << "Gracias por continuar" << std::endl;
}
return 0;
}
Primero definiremos una variable que almacenara un solo caracter, porque si a char no le pasamos un tamaño o un valor siempre sera de una sola posicion, luego mediante cout mostraremos un mensaje y con cin almacenaremos un valor en la variable anterior, observen que le indicamos los dos posibles valores. Luego viene el condicional en si donde verifica si el valor en la variable es igual a s. Lo pasamos con comilla simple porque es un solo caracter. En caso de cumplirse mostrara ese mensaje en pantalla. Compilemos y veamos como trabaja:
$ ./cond
Deseas continuar (S/N)? s
Gracias por continuar
$ ./cond
Deseas continuar (S/N)? n
$
Observen como al pasar la s nos mostro el mensaje del condicional, pero al pasar la letra n no nos devolvio nada. Tenemos dos opciones, agregamos otro condicional para evaluar esta situacion o lo modificamos de la siguiente manera:
#include <iostream>
int main()
{
char rta;
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
if (rta == 's') {
std::cout << "Gracias por continuar" << std::endl;
} else {
std::cout << "Nos vemos a la proxima" << std::endl;
}
return 0;
}
El else sirve para tomar el no cumplimiento de la condicion anterior y ejecuta su propio bloque. Por lo general, el else se lo lee como «de lo contrario». Compilemos nuevamente y veamos como trabaja:
$ ./cond
Deseas continuar (S/N)? s
Gracias por continuar
$ ./cond
Deseas continuar (S/N)? n
Nos vemos a la proxima
$ ./cond
Deseas continuar (S/N)? a
Nos vemos a la proxima
$ ./cond
Deseas continuar (S/N)? S
Nos vemos a la proxima
$
Vean como funciono con nuestras opciones, pero tambien tomo otro valor que no corresponde con los anteriores y lo proceso. Pero tambien nos devolvio un «error», en el ultimo ejemplo pasamos un S pero al no coincidir con la condicion lo paso al else. De vuelta, podemos agregar mas condicionales para cada situacion o modificar el codigo de la siguiente manera:
#include <iostream>
int main()
{
char rta;
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
if (rta == 's') {
std::cout << "Gracias por continuar" << std::endl;
} else if (rta == 'S') {
std::cout << "Gracias por continuar" << std::endl;
} else if (rta == 'n') {
std::cout << "Nos vemos a la proxima" << std::endl;
} else if (rta == 'N') {
std::cout << "Nos vemos a la proxima" << std::endl;
} else {
std::cout << "Solo puedes usar S o N." << std::endl;
}
return 0;
}
Aqui entra en accion else if, el cual nos permite evaluar otra condicion si la condicion principal no se cumple, es una mezcla de ambos porque usaremos al else seguido del if con la nueva condicion. Podemos usar todos los que sean necesarios, sin exagerar, y el else pasara a ser la ultima condicion. Porque como dijimos, es el encargado de tomar la posta cuando ninguna condicion se cumplio. Compilemos y veamos como trabaja ahora:
$ ./cond
Deseas continuar (S/N)? s
Gracias por continuar
$ ./cond
Deseas continuar (S/N)? S
Gracias por continuar
$ ./cond
Deseas continuar (S/N)? n
Nos vemos a la proxima
$ ./cond
Deseas continuar (S/N)? a
Solo puedes usar S o N.
$ ./cond
Deseas continuar (S/N)? N
Nos vemos a la proxima
$
En este caso funciono perfectamente porque cada letra devolvio la respuesta que corresponde y ahora si pasamos otra letra nos devolvera una leyenda mas acorde a esa situacion. Pero como dijimos, si bien podemos aplicar todos los else if que necesitemos, tampoco debemos exagerar y si bien este codigo es funcional no es practico y podemos mejorarlo de la siguiente manera:
#include <iostream>
int main()
{
char rta;
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
if (rta == 's' || rta == 'S') {
std::cout << "Gracias por continuar" << std::endl;
} else if (rta == 'n' || rta == 'N') {
std::cout << "Nos vemos a la proxima" << std::endl;
} else {
std::cout << "Solo puedes usar S o N." << std::endl;
}
return 0;
}
Para este codigo aplicamos los operadores logicos, en este caso al operador OR. Donde evaluaremos si la variable posee un caracter o el otro. Este tipo de operador al necesitar que solo uno de las condiciones comparadas sea verdadera, tomara ese valor cuando se cumpla en alguna. Y el else no es necesario modificarlo porque es para las situaciones externas a las anteriores. Si lo prueban debera seguir funcionando de la misma forma.
Por ultimo, tenemos una posibilidad mas como es la anidacion de condicionales. Es decir, poder usar un if dentro de otro if, para poder evaluar mas condiciones de la condicion original. Tomemos el codigo anterior y realicemos la siguiente modificacion:
#include <iostream>
int main()
{
char rta;
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
if (rta == 's' || rta == 'S') {
if (rta == 's') {
std::cout << "Gracias por continuar" << std::endl;
} else {
std::cout << "GRACIAS POR CONTINUAR" << std::endl;
}
} else if (rta == 'n' || rta == 'N') {
if (rta == 'n') {
std::cout << "Nos vemos a la proxima" << std::endl;
} else {
std::cout << "NOS VEMOS A LA PROXIMA" << std::endl;
}
} else {
std::cout << "Solo puedes usar S o N." << std::endl;
}
return 0;
}
En este caso agregamos dos if nuevos dentro del bloque del if y del else if. Estos tienen su propia condicion y un else para cuando no se cumpla. En ambos casos, lo que haremos es diferenciar la forma de mostrar el mensaje. Si rta es en minuscula lo mostramos como antes, de lo contrario (else) lo mostramos en mayusculas. Observen que solo es afectado por el condicional que lo posee e ignora el resto. Esta es una muy buena manera de poder contener todas las opciones que puedan existir en un codigo. Pero ojo con el uso excesivo, esto puede derivar en algun error logico y puede volverse verdaderamente indescifrable al momento de buscar la causa de un error o como se denomina: depuracion. Antes de finalizar les dejo la estructura basica de un condicional if:
if (condicion) {
... instrucciones ...
} else if (condicion) {
... instrucciones ...
} else {
... instrucciones ...
}
Donde el unico obligatorio es if y la condicion con su respectivo bloque de codigo. Los otros son opcionales, else if podemos tener todos los que necesitemos y else al igual que if son unicos. else no lleva ninguna condicion y siempre va al final de todo porque actua cuando no se cumple ninguna condicion anterior.
En resumen, hoy hemos visto a if, que es, para que sirve, como se utiliza, las posibilidades que nos brinda, y un ejemplo donde hemos podido ver todas sus variantes. Espero les haya resultado de utilidad 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.


Donatión
It’s for site maintenance, thanks!
$1.50
