Bienvenidos sean a este post, hoy veremos otro condicional.
Este es otro tipo de condicional, al dia de hoy esta difundido en muchos lenguajes pero no creo que tan masivamente como if. Este a diferencia de if no evalua una condicion sino que toma una variable y evalua los posibles valores que puede tomar esta. Veamos primero como es su sintaxis:
switch(variable) {
case valor_1:
... instrucciones ...
break;
case valor_2:
... instrucciones ...
break;
...
case valor_N:
... instrucciones ...
break;
default:
... instrucciones ...
break;
}
Primero pasaremos la varaible a analizar, lo siguiente es pasar cada uno de los posibles valores mediante la palabra case, el case se cierra con un break y entre estos dos podemos usar todas las instrucciones que consideremos necesarias. Podemos usar todos los case que sean necesarios y por ultimo tenemos a default. Este se ejecutara solamente si no hubo ninguna coincidencia con los case anteriores. Es decir, si tenemos que hacer un paralelismo equivale al else, porque tiene la misma conducta y tambien es opcional. Este tiene una mejor performanca que usar multiples else if, pero por que? Porque cuando se cumple el case automaticamente sale del switch, en cambio en el if continuara hasta que termine haciendo todas las verificaciones, y perdiendo importantes tiempos de proceso del CPU.
Para entender el concepto vamos a tomar el codigo del post anterior y lo cambiaremos a switch. Vamos a crear un archivo con el nombre de switch.cpp y le agregaremos el siguiente codigo:
#include <iostream>
int main()
{
char rta;
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
switch(rta)
{
case 's':
std::cout << "Gracias por continuar" << std::endl;
break;
case 'S':
std::cout << "Gracias por continuar" << std::endl;
break;
case 'n':
std::cout << "Nos vemos a la proxima" << std::endl;
break;
case 'N':
std::cout << "Nos vemos a la proxima" << std::endl;
break;
default:
std::cout << "Solo puedes usar S o N." << std::endl;
}
return 0;
}
Esto es una equivalencia al ultimo codigo que vimos en el post anterior. Primero declaramos la variable que se encargara de almacenar el valor.. Luego usaremos a cin para que guardemos el caracter en la variable y luego tenemos un switch donde evaluaremos a rta. Observen que usamos un case para cada tipo de letra «permitido» y el default para cuando no ingresamos una letra valida,, tal como el else. Si lo prueban trabajara de la siguiente manera:
$ ./switch
Deseas continuar (S/N)? s
Gracias por continuar
$ ./switch
Deseas continuar (S/N)? n
Nos vemos a la proxima
$ ./switch
Deseas continuar (S/N)? a
Solo puedes usar S o N.
$ ./switch
Deseas continuar (S/N)? N
Nos vemos a la proxima
$ ./switch
Deseas continuar (S/N)? S
Gracias por continuar
$
Devuelve el mensaje correspondiente a cada letra y para el caso que no corresponde nos devolvio otro mensaje. Antes mencionamo que case esta delimitado por el break, el que lo saca de la funcion en si, pero podemos omitir el break para ciertos casos. Tomemos el codigo anterior y realicemos la siguiente modificacion:
#include <iostream>
int main()
{
char rta;
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
switch(rta)
{
case 's':
case 'S':
std::cout << "Gracias por continuar" << std::endl;
break;
case 'n':
case 'N':
std::cout << "Nos vemos a la proxima" << std::endl;
break;
default:
std::cout << "Solo puedes usar S o N." << std::endl;
}
return 0;
}
Si observan en el codigo anterior basicamente, los case de cada letra se repetian, por lo tanto podemos eliminar el codigo de uno y el break. Donde en caso de encontrar una de las dos letras mostraremos el mensaje en pantalla, si lo prueban veran que sigue funcionando de la misma forma. Esta modificacion no afecta en su funcionamiento y nos permite eliminar codigo redundante, disminuyendo al codigo.
Otro tema es, esta condicion no reemplaza a if sino que se complementan. Para verificarlo, vamos a tomar el codigo anterior y realiccemos las siguientes modificaciones:
#include <iostream>
int main()
{
char rta;
std::cout << "Deseas continuar (S/N)? ";
std::cin >> rta;
switch(rta)
{
case 's':
case 'S':
if (rta == 's') {
std::cout << "Gracias por continuar" << std::endl;
} else {
std::cout << "GRACIAS POR CONTINUAR" << std::endl;
}
break;
case 'n':
case 'N':
if (rta == 'n') {
std::cout << "Nos vemos a la proxima" << std::endl;
} else {
std::cout << "NOS VEMOS A LA PROXIMA" << std::endl;
}
break;
default:
std::cout << "Solo puedes usar S o N." << std::endl;
}
return 0;
}
Observen que incorporamos al if en el bloque del case para cuando la letra sea minuscula o mayuscula y mostrar un mensaje en el formato ingresado. Y esto tambien se puede hacer al reves, el switch este dentro de un bloque if. Si lo probamos, funcionara de la siguiente manera:
$ ./switch
Deseas continuar (S/N)? s
Gracias por continuar
$ ./switch
Deseas continuar (S/N)? N
NOS VEMOS A LA PROXIMA
$ ./switch
Deseas continuar (S/N)? a
Solo puedes usar S o N.
$ ./switch
Deseas continuar (S/N)? S
GRACIAS POR CONTINUAR
$
Observen como sigue funcionando el tema de los case y a su vez como cada if se encarga de su tarea sin afectar a los demas. Este tipo de condicional esta mas pensado para un menu donde tendremos valores bien especificos y podemos interceptarlos mediante los case. Aunque los case no solo aceptan valores especificos sino tambien podemos usar otros elementos con datos, veamos un simple ejemplo:
switch(cuenta) {
case (a / 2):
... instrucciones ...
break;
case CONSTANTE:
... instrucciones ...
break;
case otra_var:
... instrucciones ...
break;
default:
... instrucciones ...
break;
}
Tenemos una variable llamada cuenta, en el primer case el valor sera el resultado de la division de esa variable por 2. Para el segundo case usamos una constante que puede estar definida en este bloque u en otro. Y por ultimo, otra variable porque recuerden que solo compara valores y es el valor que tomara desde la constante o variable en si. Con esto hemos visto desde lo mas basico hasta ciertas particularidades que podemos utilizar para los case. Y recuerden, este condicional NO REEMPLAZA a IF sino que lo complementa, tal como vimos en uno de los ejemplos.
En resumen, hoy hemos visto a switch, que es, para que sirve, como se utiliza, algunas implementaciones que nos permite, asi como algunas particularidades. Espero les haya sido 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
