Cada número sin nombre que no es inmediatamente obvio por el contexto es un número mágico. Es un poco tonto definir números que tienen un significado que es inmediatamente obvio por el contexto.
En django (python web framework), puedo definir algún campo de base de datos con un número sin formato como:
firstname = models.CharField(max_length=40)
middlename = models.CharField(max_length=40)
lastname = models.CharField(max_length=40)
que es más claro (y la práctica recomendada ) que decir
MAX_LENGTH_NAME = 40
...
firstname = models.CharField(max_length=MAX_LENGTH_NAME)
middlename = models.CharField(max_length=MAX_LENGTH_NAME)
lastname = models.CharField(max_length=MAX_LENGTH_NAME)
como es poco probable que necesite cambiar la longitud (y siempre se puede comparar con la max_length
del campo). Si necesito cambiar la longitud del campo después de implementar inicialmente la aplicación, necesito cambiarlo exactamente en una ubicación por campo en mi código django, y luego escribir una migración para cambiar el esquema de la base de datos. Si alguna vez necesito hacer referencia max_length
a un campo definido de un tipo de objeto, puedo hacerlo directamente; si esos campos definían una Person
clase, puedo usar Person._meta.get_field('firstname').max_length
para obtener elmax_length
siendo utilizado (que se define en un lugar). El hecho de que se usó el mismo 40 para múltiples campos es irrelevante, ya que es posible que desee cambiarlos de forma independiente. La longitud del nombre nunca debe depender de la longitud del segundo nombre o apellido; son valores separados y pueden cambiar de forma independiente.
A menudo, los índices de matriz pueden usar números sin nombre; como si tuviera un archivo CSV de datos que quiero poner en un diccionario de Python, con el primer elemento en la fila como el diccionario key
que escribiría:
mydict = {}
for row in csv.reader(f):
mydict[row[0]] = row[1:]
Claro que podría nombrar index_column = 0
y hacer algo como:
index_col = 0
mydict = {}
for row in csv.reader(f):
mydict[row[index_col]] = row[:index_col] + row[index_col+1:]
o peor, definir after_index_col = index_col + 1
para deshacerse de él index_col+1
, pero eso no hace que el código sea más claro en mi opinión. Además, si le doy index_col
un nombre, mejor hago que el código funcione incluso si la columna no es 0 (de ahí la row[:index_col] +
parte).