28.01.2015 Views

TuxInfo Número 12 - Index of

TuxInfo Número 12 - Index of

TuxInfo Número 12 - Index of

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

13<br />

PROGRAMACION<br />

Si el valor de cond se correspondiera con uno falso, entonces su valor sería el resultado del<br />

and y al aplicárserle luego el operador or, la expresión final retornaría val2. Sólo queda un<br />

caso oculto que es muy dañino y suele ser fuente de innumerables errores. Por ejemplo, en<br />

C la expresión 1 0: 2 retornaría 0. Sin embargo, el resultado de evaluar 1 and 0 or 2 en Python<br />

es 2 (... ¿por qué ...). La solución a este caso se discutirá en el próximo número de este<br />

curso ... ¡¡No se lo pierda!! ;).<br />

Posiblemente el aspecto más notorio en la implementación de todos los tipos de datos ya<br />

comentados es que los números enteros, reales, complejos, los valores booleanos, en fin…<br />

todo es un objeto, y esta filos<strong>of</strong>ía es llevada al extremo. Esto distancia a Python de otros<br />

lenguajes como C, Pascal e incluso hasta de Java (que posee tipos básicos); y lo acerca al<br />

primer lenguaje orientado a objetos… Smalltalk.<br />

Para apoyar esta afirmación la Figura 5 muestra el uso de varias funciones que permiten<br />

conocer información sobre cualquier dato disponible. Primeramente la función type permite<br />

determinar el tipo asociado a cualquier valor; mientras que isinstance es la manera más<br />

recomendada (se verá después por qué) para determinar si un valor dado es de un tipo<br />

(e.g. un número entero) o no.<br />

El hecho de que todo sea un objeto posibilita la sobrecarga de operadores aritméticos (qué<br />

será detallada posteriormente). La Figura 5 muestra otras formas de sumar y multiplicar<br />

dos números reales o enteros, utilizando los métodos especiales __add__ y __mul__. Si los<br />

valores adicionados no son compatibles, cada método retorna el objeto NotImplemented,<br />

otro objeto muy especial y único en su especie. Este valor se utiliza para marcar las<br />

funcionalidades y servicios que están previstos en el diseño de un s<strong>of</strong>tware, pero que<br />

todavía no se han implementado, o no se van a implementar ya sea porque no tiene<br />

sentido hacerlo, porque hay tipos de dato incompatibles, o cualquier otra razón.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!