[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