....

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:

oswa...@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.
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a