Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 5

INSTRUCCIÓN SWITCH

 
Una instrucción switch funciona de un modo muy similar a una construcción con if...else if...
else. Sin embargo, hay un diferencia que es fundamental: mientras en las construcciones
if...else if... else las condiciones pueden ser distintas en cada uno de los if ... else if, en
un switch se evalúa siempre la misma expresión, comprobando todos los posibles
resultados que esta pueda retornar. Un switch equivaldría a comprobar las diferentes
situaciones que se pueden dar con respecto a una misma cosa. Por ejemplo, si te compras un
coche y tienes varias opciones de financiación: En caso de usar la primera opción te descuento
un 10 por ciento, en caso de usar la segunda opción te descuento un cinco por ciento, en caso
de usar la tercera opción te descuento un dos por ciento, y en cualquier otro caso no te
descuento nada. Como ves, se comprueba siempre el valor de un solo elemento, que en este
caso sería la opción. Pongamos un poco de pseudo-código otra vez:
 
comprobemos (opcion)
{
    en caso de 1:
        te descuento un 10%;
        Nada más;
    en caso de 2:
        te descuento un 5%;
        Nada más;
    en caso de 3:
        te descuento un 2%;
        Nada más;
    en otro caso:
        no te descuento nada;
        Nada más;
}
 
Bueno, como veis, se comprueba siempre lo que vale "opcion"; si vale 1 sucede el primer caso,
si vale 2 el segundo, si vale 3 el tercero, y si vale cualquier otra cosa sucede el último caso.
Vamos a verlo en C#:
 
switch (opcion)
{
    case 1:
        descuento=10;
        break;
    case 2:
        descuento=5;
        break;
    case 3:
        descuento=2;
        break;
    default:
        descuento=0;
        break;
}
 
Hay algunas cosas importantes en las que quiero que te fijes especialmente: solamente se
establece un bloque para la instrucción "switch", pero ninguno de los "case" abre ningún bloque
(tampoco lo hace "default"). Una vez que se terminan las instrucciones para cada caso hay que
poner "break" para que el compilador salga del switch (esto lo digo especialmente para los
programadores de Visual Basic, ya que en VB no había que poner nada al final de cada Case
en un Select Case). ¿Y qué ocurre si no se cierra el "case" con un "break"? Bien, pueden
ocurrir dos cosas.
Veamos: si queremos que el programa haga las mismas cosas en distintos casos, habrá que
poner todos estos casos y no cerrarlos con break. Por ejemplo, si el descuento es 5 tanto para
la segunda como para la tercera opción, habría que hacerlo así:
 
switch (opcion)
{
    case 1:
        descuento=10;
        break;
    case 2:
    case 3:
        descuento=5;
        break;
    default:
        descuento=0;
        break;
}
 
Así, en caso de que opcion valiera 2 ó tres, el descuento sería del 5%, pues, si opcion vale 2, el
flujo del programa entraría por case 2 y continuaría por case 3 ejecutando el código de este
último al no haber cerrado el case 2 con break, y si opción vale 3 entraría por case 3
ejecutando, por lo tanto, el mismo código. Sin embargo, no hubiera sido válido establecer
acciones para el case 2 sin cerrarlo con break.
 
switch (opcion)
{
    case 1:
        descuento=10;
        break;
    case 2:
        regalo="Cargador de CD"
    case 3:
        descuento=5;
        break;
    default:
        descuento=0;
        break;
}
 
Voy a examinar esto como si estuviera escrito en C/C++: si opcion vale 2, el flujo entraría por
case 2, estableciendo el regalo y seguiría por case 3 estableciendo también el descuento, dado
que case 2 no ha sido cerrado con un break. Si opción vale 3 entraría solamente por case 3,
estableciendo únicamente el descuento y no el regalo. Ciertamente, esto era muy cómodo si
querías definir acciones específicas para un valor determinado y añadirles otras que fueran
comunes para varios valores. Sin embargo, esto no se puede hacer en C#, dado que el
compilador avisaría de un error, diciendo que hay que cerrar case 2. ¿Por qué? Pues bien, a
pesar de la comodidad de esta construcción en C/C++ para determinadas circunstancias, lo
cierto es que lo más común es que se omita el break por error que por intención, lo cual
provoca muchos fallos que serían muy difíciles de detectar. Por este motivo, los diseñadores
del lenguaje C# decidieron que el riesgo no merecía la pena, ya que esta funcionalidad se
puede conseguir fácilmente con un simple if, así:
 
switch (opcion)
{
    case 1:
        descuento=10;
        break;
    case 2:
    case 3:
        if (opcion==2) regalo="Cargador de CD";
        descuento=5;
        break;
    default:
        descuento=0;
        break;
}
 
Es cierto que esto es un poco más incómodo, pero también es cierto que es mucho más
seguro, ya que se evitan los problemas que sobrevenían en C/C++ cuando te olvidabas de
poner un break.
 
Para terminar, la expresión que se ha de comprobar en un switch ha de ser, necesarimente,
compatible con los tipos sbyte, byte, short, ushort, int, uint, long, ulong, char o
Switch
La instrucción switch nos va a facilitar mucho trabajo en determinados
programas. Supongamos que queremos hacer un programa que dé un número
entero y escriba por pantalla su valor ordinal (primero, segundo, etc...).

Con lo que sabemos hasta ahora, lo haríamos así:

Con el uso de switch podemos simplificar la estructura.

A continuación el ejemplo hecho con switch:


Puede parecer lo mismo, pero hemos simplificado mucho el código.

Voy a explicar la estructura en detalle y lo entenderéis mejor:

1. Se inicia una bloque switch, poniendo entre paréntesis la variable que


vamos a utilizar.
2. Con la palabra case creamos las condiciones. "Case 1" quiere decir si la
variable entre paréntesis vale 1. De esa forma podemos añadir los casos
que queramos fácilmente.
3. Escribimos todo lo que queremos que pase cuando se cumpla la
condición.
4. Utilizamos la palabra break para salir del bloque una vez se ejecute
alguna condición.

Otras cosas a tener en cuenta sobre su funcionamiento:

 Podemos poner todos los case que queramos.


 La variable puede ser de cualquier tipo, luego las condiciones deben
atenerse al cambio.
 Podemos emular al else de la instrucción if utilizando la palabra default.
 Se pueden anidar los case para un mismo resultado.

Ahora veamos un switch más complejo con todas estas posibilidades:

También podría gustarte