Odio que Python no pueda distinguir entre declaración y uso de una variable. No necesita escribir estática para que eso suceda. Sería bueno tener una manera de decir "esta es una variable que declaro deliberadamente, y tengo la intención de introducir un nuevo nombre, esto no es un error tipográfico".
Además, generalmente uso las variables de Python en un estilo de escritura única, es decir, trato las variables como inmutables y no las modifico después de su primera asignación. Gracias a características como la comprensión de la lista, esto es realmente increíblemente fácil y hace que el código fluya más fácilmente.
Sin embargo, no puedo documentar ese hecho. Nada en Python me impide sobrescribir o reutilizar variables.
En resumen, me gustaría tener dos palabras clave en el idioma: var
y let
. Si escribo en una variable no declarada por ninguno de esos, Python debería generar un error. Además, let
declara las variables como de solo lectura, mientras que las var
variables son "normales".
Considere este ejemplo:
x = 42 # Error: Variable `x` undeclared
var x = 1 # OK: Declares `x` and assigns a value.
x = 42 # OK: `x` is declared and mutable.
var x = 2 # Error: Redeclaration of existing variable `x`
let y # Error: Declaration of read-only variable `y` without value
let y = 5 # OK: Declares `y` as read-only and assigns a value.
y = 23 # Error: Variable `y` is read-only
Tenga en cuenta que los tipos siguen siendo implícitos (pero las let
variables son para todos los propósitos y tipos estánticamente tipados, ya que no pueden volver a un nuevo valor, mientras que las var
variables aún pueden tipearse dinámicamente).
Finalmente, todos los argumentos del método deberían ser automáticamente let
, es decir, deberían ser de solo lectura. En general, no hay una buena razón para modificar un parámetro, excepto por el siguiente modismo:
def foo(bar = None):
if bar == None: bar = [1, 2, 3]
Esto podría ser reemplazado por un idioma ligeramente diferente:
def foo(bar = None):
let mybar = bar or [1, 2, 3]