por
pobrecito hablador
el Lunes, 17 Enero de 2011, 13:21h
(#1261112)
La ventajas de utilizar un switch frente a un if-else son las optimizaciones que puede aplicar el compilador.
El caso mas sencillo, en el que las constantes son proximas (por ejemplo, casos de la 'a' a la 'z'), es utilizar una tabla con las direcciones de cada salto (de manera que se ejecuta algo asi como table[c - 'a']();). Esto se traduce en un mejor rendimiento si por ejemplo el valor de c fuera 'z', ya que en el caso de un if-else tendrian que evaluarse todas las condiciones ( c == 'a', c == 'b', etc...)
por
pobrecito hablador
el Lunes, 17 Enero de 2011, 13:57h
(#1261117)
"Es que ES un if-else-else, igual que un for es lo mismo que un while."
No exactamente.
Por un lado, sí es más inteligible ("mapea" mejor a un esquema mental de "multiple choice"). Por otro, no siempre es igual a un if-else-else debido a la opcionalidad del "break" que permite entrada condicional dentro de una cascada de acciones: switch:
case 1:
dosomething;
break;
case 2:
dosomething;
case 3:
dosomething;
break;
default:
dosomething;
Como se ve, entrar en el caso 2 ejecutará 2 *y* 3 "en cascada". Hacerlo mediante sentencias if-else-else sería considerablemente más oscuro.
Re:Strings in switch statements
(Puntos:0);
START:
MOV R1,USUARIO
MOV R2,TROLL
CJNE R2,R1,EXIT
GOTO START
EXIT:
Re:Strings in switch statements
(Puntos:0)La ventajas de utilizar un switch frente a un if-else son las optimizaciones que puede aplicar el compilador.
El caso mas sencillo, en el que las constantes son proximas (por ejemplo, casos de la 'a' a la 'z'), es utilizar una tabla con las direcciones de cada salto (de manera que se ejecuta algo asi como table[c - 'a']();). Esto se traduce en un mejor rendimiento si por ejemplo el valor de c fuera 'z', ya que en el caso de un if-else tendrian que evaluarse todas las condiciones ( c == 'a', c == 'b', etc...)
Re:Strings in switch statements
(Puntos:1, Informativo)No exactamente.
Por un lado, sí es más inteligible ("mapea" mejor a un esquema mental de "multiple choice"). Por otro, no siempre es igual a un if-else-else debido a la opcionalidad del "break" que permite entrada condicional dentro de una cascada de acciones:
switch:
case 1:
dosomething;
break;
case 2:
dosomething;
case 3:
dosomething;
break;
default:
dosomething;
Como se ve, entrar en el caso 2 ejecutará 2 *y* 3 "en cascada". Hacerlo mediante sentencias if-else-else sería considerablemente más oscuro.