mayo 20, 2010

Una rareza de Python: La asociatividad de los comparadores

Algunos lenguajes de programacíon de uso común, como C y C++, hacen que sus operadores de comparacion sean asociativos, por lo que presentan el problema de que expresiones como 2 < 1 < 4 producen un resultado que parece ilógico. Al ser asociativo por la izquierda el operador de comparacion <, se evalúa primero la subexpresion 2 < 1. El resultado es falso, que en C y C++ se representa con el valor 0. A continuacion se evalúa la comparación 0 < 4, cuyo resultado es… ¡cierto! Asi pues, para C y C++ es cierto que 2 < 1 < 4.

Pascal es más rigido aún y llega a prohibir expresiones como 2 < 1 < 4. En Pascal hay un tipo de datos denominado boolean cuyos valores válidos son true false. Pascal no permite operar entre valores de tipos diferentes, así que la expresion 2 < 1 se evalúa al valor boolean false, que no se puede comparar con un entero al tratar de calcular el valor de false < 4. En consecuencia, se produce un error de tipos si intentamos encadenar comparaciones.

La mayor parte de los lenguajes de programación convencionales opta por la solución del C o por la solución del Pascal. Cuando aprendas otro lenguaje te costará <<deshabituarte>> de la elegancia con que Python resuelve los encadenamientos de comparaciones.

No hay comentarios.:

Publicar un comentario

"Todos los comentarios son moderados para evitar el spam. Tu comentario será publicado en breve. ¡Gracias por tu aportación!"