Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/01/2013, 08:18
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Switch-Case - Solución para múltiples IF

El problema principal de switch es de mantenimiento, y de hecho el ejemplo que presenta el usuario (el mismo que sería difícil de representar con diccionarios) es al mismo tiempo perfecto ejemplo de eso. Copio el código aquí por si algún día desaparece el artículo enlazado.

Código C:
Ver original
  1. switch(n) {
  2.     case 0:
  3.         printf("You typed zero.\n");
  4.         break;
  5.     case 1:
  6.     case 9:
  7.         printf("n is a perfect square\n");
  8.         break;
  9.     case 2:
  10.         printf("n is an even number\n");
  11.     case 3:
  12.         printf("n is this");
  13.     case 5:
  14.         printf("n is also this");
  15.     case 7:
  16.         printf("n is too complex for silly python hacks")
  17.         printf("n is a prime number\n");
  18.         break;
  19.     case 4:
  20.         printf("n is a perfect square\n");
  21.     case 6:
  22.     case 8:
  23.         printf("n is an even number\n");
  24.         break;
  25.     default:
  26.         printf("Only single-digit numbers are allowed\n");
  27.         break;
  28. }

Obsérvalo bien. Intenta comprender todo lo que sucede para cada dígito, y luego imagínate intentando hacer una modificación simple como agregar una opción faltante, agregar código para alguna de las opciones.
Dinos si no te parece que deberías tener bastante cuidado. Este switch está perfectamente adaptado a este caso (e incluso así, tiene código repetido), y en cualquier modificación habrá que reescribirlo.

Switch no es malo, es bastante útil. Python no lo incluye, y honestamente creo que no lo necesita: perfectamente se puede acomodar la lógica del programa para que funcione de forma equivalente, aunque no sea equivalente en el código.

Por ejemplo, en tu caso con los usuarios y los radio, yo haría una modificación al momento de generar los radioN:

Código Python:
Ver original
  1. for u in usuarios:
  2.     radios[u.numero] = ...
y luego
Código Python:
Ver original
  1. radios[usuarioactivonumero].SetValue(1)


Saludos.

Última edición por AlvaroG; 14/01/2013 a las 08:23