Icono play
Java
Técnica magic numbers

La técnica magic numbers o números mágicos es una estrategia de refactorización cuya aplicación es bastante sencilla y su utilidad es evidente, sobre todo en proyectos complejos y extensos. 

Los números mágicos o magic numbers son aquellas cifras que mantienen su valor en varias operaciones a lo largo de todo un código, no cambian, así que lo más conveniente es darles un tratamiento especial que optimice el manejo de la información, no solo ahora, sino cuando el código necesite mantenimiento o actualización.

Es quizá una de las técnicas de refactorización más fáciles de comprender.

¿Cuándo aplicar la técnica magic numbers?

Cuando haya un número que no cambie su valor y que vaya a cumplir una tarea en varias oportunidades a lo largo de todo el código, lo recomendable es emplear la técnica de magic numbers

Los números mágicos son usados para establecer posiciones, darle tamaño a algunas estructuras (arrays de una o más dimensiones) y también para indicar el número de veces que se lleva a cabo un procedimiento o se ejecuta una instrucción específica. 

Si cualquiera de estas situaciones se presenta en el código que estamos desarrollando, es el momento de considerar la aplicación de esta técnica de refactorización.

¿Por qué utilizar la técnica magic numbers?

  • Para mejorar la legibilidad de nuestro código, cuando sustituimos los números mágicos en un programa, será más sencillo para otros comprender qué función cumple cada expresión que empleamos. 
  • Para facilitar la tarea de hacer cambios o reemplazar valores si llega el momento de que esta actividad sea necesaria.

Pasos para usar la técnica magic numbers

  • En primer lugar, revisaremos el código con detenimiento para determinar si efectivamente hay un número mágico en nuestro proyecto.
  • Asignaremos el valor del número mágico a una constante cuyo nombre sea lo más explícito posible con respecto a lo que representa. 
  • Sustituiremos al número mágico en cada una de sus apariciones.
  • Compilaremos el código para confirmar que la constante está reemplazando al número mágico de manera efectiva y no está causando conflicto alguno.
  • Si al realizar este último paso, todo funciona, entonces habremos aplicado la técnica magic numbers con éxito.

Ahora vamos a revisar un ejemplo para ver cómo se utiliza la técnica magic numbers en la práctica. En el siguiente código se usan dos números con un valor fijo que no va a cambiar en la ejecución del programa:

package numerosMagicos;

public class NumMagic {
    double precio = 0;
    int cantidad = 0;

    public NumMagic(double precio, int cantidad) {
        this.precio = precio;
        this.cantidad = cantidad;
    }

    public double costo() {

        double costo = (precio * cantidad);

        //calculamos el monto del descuento usando un 'número mágico'
        double descuento = (costo * 0.10);

        //sumamos el costo del envio con otro 'número mágico'
        double precioTotal = (costo - descuento + 4.50);
        return (precioTotal);

    }

    public static void main(String[] args) {
        NumMagic obj1 = new NumMagic(500, 2);
        System.out.println("El costo final es: " + obj1.costo());
    }
}

Ahora, aplicamos la técnica magic numbers, es importante tomar en cuenta que por convención se usa la palabra final y el identificador está escrito en mayúsculas totalmente: 

package numerosMagicos;

public class NumMagic {
    double precio = 0;
    int cantidad = 0;

    /*creamos dos constantes que van a 
    reemplazar los números mágicos
    en caso de ser necesario cambiar el valor,
    se hará desde estas declaraciones
    */

    private static final double DESCUENTO = 0.10;
    private static final double ENVIO = 4.50;

    public NumMagic(double precio, int cantidad) {
        this.precio = precio;
        this.cantidad = cantidad;
    }

    public double costo() {
        double costo = (precio * cantidad);

        //calculamos el monto del descuento usando una de las constantes'
        double descuento = (costo * DESCUENTO);

        //sumamos el costo del envío usando la otra constante declarada'
        double precioTotal = (costo - descuento + ENVIO);

        return (precioTotal);

    }

    public static void main(String[] args) {

        NumMagic obj1 = new NumMagic(500, 2);
        System.out.println("El costo final es: " + obj1.costo());

    }

}

Estos son ejemplos con fines didácticos para ver los aspectos esenciales de la técnica que estamos estudiando.

¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: