La sentencia «switch (case)» es una estructura de control que permite controlar el flujo del programa basado en el valor de una variable o expresión. Se usa comúnmente para evitar el uso de if’s anidados, lo que en cierta parte disminuye la legibilidad y rapidez de un programa.

Su funcionamiento es sencillo, si la variable o expresión tiene un número determinado de valores, se podría ejecutar una serie de acciones dependiendo de cada valor por separado.

Un ejemplo en C y Pascal:

int main()
{
    int num = 1;
 
    switch (num)
    {
        case 0: printf("El número es cero\n");
		break;
	case 1: printf("El número es uno\n");
		break;
	case 2: printf("El número es dos\n");
		break;
	/* case default: */
    }
    return EXIT_SUCCESS;
}

var
  Num:Integer = 2;
 
begin
    case Num of {Inicio Case}
      0:WriteLn('Cero');
      1:WriteLn('Uno');
      2:WriteLn('Dos');
    else
      WriteLn('Desconocido');
    end; {Fin Case}
    ReadLn;
end.

Basándose en el valor de la variable Num (Integer) mostrará un mensaje de salida diferente. El default ( C ) y el else ( Pascal ) se ejecuta cuando el valor de la variable no coincide con ninguno de los valores anteriores.
Python
La mayoría de los lenguajes de programación cuentan con ésta sentencia, pero por desgracia Python no, en lugar de ello se usa una serie de bloques if-elif-else.

Aquí un ejemplo como los anteriormente vistos:

Num = 3
 
if Num == 0:
   print 'Cero'
elif Num == 1:
   print 'Uno'
elif Num == 2:
   print 'Dos'
elif Num == 3:
   print 'Tres'
else:
   print 'Desconocido...'

¡Bien!, una solución simple, efectiva, bastante fácil de trabajar pero no es elegante. Especialmente si se llegase a tener más de diez casos a tratar, una lista bastante «pequeña» de if,elif,else ¿no?, Jeje!.

La solución es una pequeña simulación de ésta sentencia usando Diccionarios o mejor conocidos como arrays asociativos, el cual como su nombre lo indica, podemos asociar el valor de la variable (caso) a una función que contiene la respectiva parte de código.

Aquí está parte del código anterior usando ésta simulación:

def Cero():
    print 'Cero'
 
def Uno():
    print 'Uno'
 
def Dos():
    print 'Dos'
 
Switch = { 0:Cero,
	   1:Uno,
	   2:Dos,
         }
 
Num = 1
Switch[Num]()

Con el uso de diccionarios en Python podemos hacer una sentencia bastante limpia y dejar de recurrir a excesivos if’s anidados.

Vale aclarar que el ejemplo anterior no proporciona un caso por defecto, pero una solución sería usar try & except, ya que si el valor del caso sobrepasa los posibles devolvería un error del tipo KeyError pudiendo así ejecutar un código predeterminado.