Refactorización/Reemplazar número mágico con constante simbólica

De Wikilibros, la colección de libros de texto de contenido libre.
Ir a la navegación Ir a la búsqueda

Reemplazar numero mágico por una constante simbólica

Que es un Numero mágico[editar]

Un número mágico es un valor codificado que puede cambiar en una etapa posterior, pero que puede ser, por tanto, difícil de actualizar.

Por que se debe evitar un numero mágico[editar]

El número mágico de término también se refiere a la mala práctica de programación de utilizar números directamente en código fuente sin explicación. En la mayoría de los casos esto hace más difícil de leer, comprender y mantener programas. Aunque la mayoría de guías hacen una excepción para los números cero y uno, es una buena idea para definir todos los demás números en código como constantes con nombre. A continuación algunos factores que lleven al uso de un numero magico por parte de las personas.

1. El programador no tiene formación adecuada.
2. Aún teniendo formación, el programador no tiene la experiencia suficiente para aplicar proactivamente lo aprendido.
3. La presión de tiempo por una entrega del producto puede hacer que se programe "como sea".
4. Se programa en un entorno cultural indisciplinado y caótico.
5. No existen referencias externas que induzcan a una programación adecuada en el entorno cultural (programadores de mayor         experiencia.

Un número mágico es un uso directo de un número en el código.

            public class Foo {
            public void setPassword(String password) {
           // don't do this
            if (password.length() > 7) {
              throw new InvalidArgumentException("password");
         }  }

Esto debe ser repartido a:

    public class Foo {
    public static final int MAX_PASSWORD_SIZE = 7;
    public void setPassword(String password) {
         if (password.length() > MAX_PASSWORD_SIZE) {
              throw new InvalidArgumentException("password");
         }

} Mejora la legibilidad del código y es más fácil de mantener. Imaginemos el caso donde configuro el tamaño del campo de contraseña en la GUI. Si utilizo un número mágico, cada vez que cambia el tamaño máximo, tengo que cambiar en dos ubicaciones de código. Si se me olvida uno, esto conducirá a incoherencias.

Constante simbólica[editar]

Una constante simbólica representa (sustituye) a una secuencia de caracteres, en vez de representar a un valor (dato almacenado en memoria).

Para declarar una constante simbólica, en lenguaje C, se utiliza una nueva directiva del preprocesador:

  1. define <constante> <secuencia_de_caracteres>

La directiva #define indica al preprocesador que debe sustituir, en el código fuente del programa, todas las ocurrencias del <nombre_de_la_constante> por la <secuencia_de_caracteres>, antes de la compilación. Dos constantes muy habituales son:

  1. define PI 3.141592 #define

NUMERO_E 2.718281

En programación es una buena práctica escribir los identificadores de las constantes en mayúsculas, de esta forma es más fácil localizarlos en el código de un programa. Nótese que, después de la declaración de una constante simbólica no se escribe un carácter punto y coma (;), cosa que sí se debe hacer al declarar una variable.

Por otra parte, no se puede declarar más de una constante simbólica en una misma línea de código.

Reemplazamos un numero magico por una constante simbolica, Ejemplo[editar]

Numero mágico

            double energiaPotencial(double masa, double altura){
              return masa * 9.81 * altura;             
            }

Constante simbolica

       double energiaPotencial(double masa, double altura){
          return masa * INTENSIDAD_DE_GRAVEDAD * altura;
       }
       static const double INTENSIDAD_DE_GRAVEDAD = 9.81;

Referencias[editar]

http://es.softuses.com/5106 http://www.refactoring.com/catalog/replaceMagicNumberWithSymbolicConstant.html http://sourcemaking.com/refactoring/replace-magic-number-with-symbolic-constant