[pyar] [Consulta]Programación: constante

fisa fisadev en gmail.com
Lun Mar 5 13:43:14 ART 2012


El día 5 de marzo de 2012 06:44, Angel Java Lopez
<ajlopez2000 en gmail.com> escribió:
> Hola gente!
>
> Vayamos al uso en el dia a dia.
>
> Yo distingo dos casos: constantes definidas por otros, y constantes
> definidas por el programador que esta construyendo algo.
>
> El primer caso me parece el mas frecuente. Como comentaron en este thread,
> el caso clasico es pi. En Java, esta un Math.PI, es mas, el valor que tiene
> que devolver esta sujeto a una especificacion de Java, y hasta esta definido
> que tiene que devolver Math.sin(x) y demas, para que una implementacion de
> Java se considere una implementacion correcta de Java.
>
> El de constantes definidas por el programador/equipo, tiene dos vertientes.
> La primera, es para mi, mas rara: definir constantes como PI, con un valor
> que importa en la ejecucion. A no ser que uno comience un paquete matematico
> con nuevas constantes, o alguna libreria con strings magicos, puestos como
> constantes, no lo vi usado mucho ultimamente.
>
> Otro uso de constantes por el programador/equipo, es mas corriente. Es
> simplemente para recordar algunas cosas mejor, tipo en una maquina de estado
> recordar los estados de algo de mejor forma:
>
> PENDING = 0
> OPENED = 1
> CLOSED = 2
> ....
>
> Ahora bien, todo el codigo se escribe SIN IMPORTAR que luego eso valores se
> cambien. El programa sigue funcionando si luego alguien pone:
>
> PENDING = 1
> OPENED = 2
> CLOSED = 3
> ....
>
> (por supuesto, estamos hablando de un programa en memoria, donde no se hayan
> serializado/deserializado esos valores en otro lado, disco, base de datos,
> etc...)
>
> O en juego de tablero, recordar los colores de los jugadores:
>
> WHITE = 0
> BLACK = 1
>
> Eso, desde hace unas decadas, se resuelve en otros lenguajes, con enums. O
> en Ruby, Smalltalk, con simbolos.
>
> Hay enum en Python? Y simbolos?
>
> Nos leemos!
>
> Angel "Java" Lopez
> http://www.ajlopez.com
> http://twitter.com/ajlopez
>
>

Entiendo los dos casos de uso, pero fijate que en ningún punto de
ellos el hecho de que estos valores definidos sean imposibles de
modificar es mandatorio. Esos casos se resuelven perfectamente con
variables, el concepto de "constante" no es mandatorio.

Al definir PENDING, CLOSING, WHITE, etc, tu requerimiento es "quiero
definir lo que esto significa, para luego usar un nombre en lugar de
escribir el valor siempre, y poder modificar mi código sin en algún
momento quiero cambiar el valor asociado sin tener que recorrer todo
el código buscando el valor, solo cambio la definición".
Ese requerimiento es perfectamente realizable usando variables :)

Volviendo a lo que otro ya mencionó, en python se asume que el
programador no es tonto, y no hace lo de otros lenguajes, de limitar
al programador para evitar que se equivoque.
Si tenés un valor que definís en un solo lado y luego siempre usas,
simplemente definís una variable, no hay razón para que el intérprete
te tenga que limitar si en algún momento querés conscientemente
cambiar su valor. La única razón sería evitar que el programador se
equivoque, pero eso es responsabilidad del programador. La capacidad
de alguien para equivocarse no es razón para limitar a otro que puede
estar queriendo hacer lo mismo pero conscientemente.

-- 
fisa  -  Juan Pedro Fisanotti



More information about the pyar mailing list