[Python-es] Análisis sobre Python vs ruby WAS: Python y/o ruby para no programadores
Oswaldo Hernández
listas en soft-com.es
Mie Feb 10 20:37:52 CET 2010
....
>>
>> El if/elif/else es lo más recomendable para hacer algo parecido a un
>> switch.
Solo comentar lo que yo llamo el *mito* del switch.
En C el switch tiene una importante restricción: los valores del case
deben ser constantes. Si intentas compilar este fichero:
<test.c>
#include <stdio.h>
int main() {
int a, b;
a = 1;
b = 1;
switch(a) {
case b: break;
}
}
</test.c>
el resultado que obtienes es:
oswaldo en s2:~$ gcc test.c -o test
test.c: In function ‘main’:
test.c:8: error: case label does not reduce to an integer constant
Gracias a esto el compilador puede preestablecer unos jumps para cada
uno de los cases y asi evitar buscarlo en tiempo de ejecución.
En los lenguajes de alto nivel que implementan switch con cases que
admiten expresiones o variables, es completamente imposible predefinir
con anterioridad a la ejecución cual será el case apropiado a cada
valor, por lo que se verán forzados a evaluar uno por uno cada case
hasta alcanzar el apropiado.
Esto nos lleva a que en la práctica, en lenguajes como ruby, python si
lo implementa alguna vez, y otros que lo implementan de esa forma, no
hay ninguna diferencia entre usar bloques switch o bloques if elif else.
Salvo la puramente visual claro.
El uso de diccionarios en python para saltar directamente a la funcion
apropiada seria los mas parecido a lo que hace el compilador de C, salvo
que en C lo hace el compilador y en python el programador.
Saludos,
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
Más información sobre la lista de distribución Python-es