lunes, 15 de julio de 2013

INSTRUCCÓN SWITCH

La instrucción switch es muy parecida a la estructura if-else-if, sólo que permite seleccionar entre varias alternativas de una manera más cómoda. Funciona de la siguiente manera: el valor de una expresión se prueba sucesivamente con una lista de constantes. Cuando se encuentra una coincidencia, se ejecuta la secuencia de instrucciones asociada con esa coincidencia. La forma general de la instrucción switch es la siguiente:

        switch( expresión ){
            case constante1:
                instrucciones;
                break;
            case constante2:
                instrucciones;
                break;
            ...
            default:
                instrucciones;
                break;
        } 
 
 
La sentencia default se ejecutará sólo si ninguna constante de las que siguen a case coincide con expresión. Es algo similar al else final de la instrucción if-else-if.
Sin más, vamos a por un ejemplo:


using System;

    class InstruccionSwitch{
        public static void Main()
        {
            string s;

            Console.WriteLine( "Elige hacer algo con los números 2 y 3");
            Console.WriteLine( "    + para sumarlos" );
            Console.WriteLine( "    - para restarlos" );
            Console.WriteLine( "    * para multiplicarlos" );
            Console.WriteLine( "    / para dividirlos (division entera)" );

            s = Console.ReadLine();

            switch(s){
                case "+":
                    Console.WriteLine("El resultado es {0}", 2+3);
                    break;
                case "-":
                    Console.WriteLine("El resultado es {0}", 2-3);
                    break;
                case "*":
                    Console.WriteLine("El resultado es {0}", 2*3);
                    break;
                case "/":
                    Console.WriteLine("El resultado es {0}", 2/3);
                    break;
                default:
                    Console.WriteLine("No te entiendo");
                    break;
            }
        }
    }

El cual solicita al usuario que inserte uno de los símbolos +-*/ , y con un switch compara los resultados para hacer diferentes acciones dependiendo del valor de s, que es la cadena de caracteres que almacena la elección del usuario. El resultado debería ser algo parecido a esto:

Elige hacer algo con los números 2 y 3
    + para sumarlos
    - para restarlos
    * para multiplicarlos
    / para dividirlos (division entera)
*
El resultado es 6

Como habrá notado, al final de todo case siempre hay una sentencia break. Esto no es obligatorio, puede haber en su lugar otra sentencia de salto como un goto inclusive en el caso default.
Siempre se deberá tener un break o un goto en cada caso a menos que la sentencia esté vacía. En esta situación se ejecutará el siguiente caso que viene en la lista. Si no se toma en cuenta ésto se obtiene un error en tiempo de compilación. Otros lenguajes, como C/C++ o Java no tienen esta restricción. La razón de adoptarla en C# es doble: por un lado, elimina muchos errores comunes y en segundo lugar permite al compilador reorganizar las sentencias de los case, y así permitir su optimización.
Ejemplo:
 using System;
  
    class InstruccionSwitch{
        public static void Main()
        {
            int voto;
            Console.WriteLine( "Qué tipo de musica te gusta más");
            Console.WriteLine( "1 - Rock" );
            Console.WriteLine( "2 - Clásica  (clasica cuenta como instrumental)" );
            Console.WriteLine( "3 - Instrumental" );
            Console.WriteLine( "4 - Alternativa (alternativo cuenta como Rock)" );
  
            voto = Int32.Parse(Console.ReadLine());
  
            switch(voto){
                case 1:
                    Console.WriteLine("Has votado por Rock o Alternativo");
                    break;
                case 2: //Debido a que no tiene ni un goto ni break y está vacía va al siguiente caso 
                case 3:
                    Console.WriteLine("Has votado por Clásica o Instrumental");
                    break;
                case 4:
                    goto case 1;
                default:
                    Console.WriteLine("No te entiendo");
                    break;
            }
        }
    }

 

No hay comentarios:

Publicar un comentario