martes, 11 de diciembre de 2012

Números mágicos

En términos de programación, un "Magic Number" es una constante numérica usada para identificar un ente (ya sea valor de un diccionario, un estado, una constante...). Algo que directamente podría interpretarse como una mala práctica. Desde luego, el uso de estos números, no condiciona el propio código en sí, ya que seguirá funcionando perfectamente; ahora bien, no se puede decir lo mismo en cuanto a la mantenibilidad del mismo.

Buscando en la wikipedia sobre estos bichitos, encuentro dos códigos para una misma tarea.

   for i from 1 to 52
       j := i + randomInt(53 - i) - 1
       a.swapEntries(i, j)

En este primer código, encontramos que nos devuelve 52 valores aleatorios de un Array.

   constant int deckSize := 52
   for i from 1 to deckSize
       j := i + randomInt(deckSize + 1 - i) - 1
       a.swapEntries(i, j)

En este, ya comprendemos un poco más. Resulta que el 52 es el tamaño de una baraja (deckSize) en cartas.

Obviamete, y para mi gusto, el hecho de tener una variable que identifique con su nombre el porqué de un valor, no es suficiente.

Usemos enumerados por favor. En este caso, podríamos tener por ejemplo, un enumerado llamado Deck (baraja). Aquí nos hemos ido a .NET:


Ahora, el uso de un enumerado, junto con una buena descripción de la variable, nos lo dice todo:





No hay comentarios:

Publicar un comentario