Icono play
Java
Técnica de consolidate duplicate

Consolidate duplicate es una técnica de refactorización que se enfoca en la necesidad de evitar que en el código de cualquier aplicación, programa o proyecto que estemos desarrollando, haya líneas o conjuntos de estas que se repitan. 

No solo se considera código duplicado aquel que realmente es igual, sino también el que tiene funciones similares y que, con leves cambios, podría hacer el mismo trabajo.

¿Cuándo aplicar la técnica consolidate duplicate?

Cuando encontramos el mismo código en diversas partes de un programa. Por ejemplo, en estructuras de tipo condicional, se puede presentar el caso con frecuencia. 

Si al evaluar un fragmento del programa se lleva a cabo una tarea y luego, al evaluar otra parte se lleva a cabo la misma tarea, estamos ante una ocasión ideal para poner en práctica esta técnica de refactorización de código.

¿Por qué utilizar la técnica consolidate duplicate?

  • Para crear código que sea eficiente, evitando que los proyectos que desarrollamos sean innecesariamente extensos. Un software no requiere tamaño para cumplir sus objetivos, sino tener exclusivamente lo que necesita y no más.
  • Para disminuir el costo cuando llegue el momento de hacerle mantenimiento al proyecto. Un código con menor duplicación será más sencillo de revisar y optimizar.

Pasos para usar la técnica consolidate duplicate

  • Para emplear la técnica consolidate duplicate, primero hay que comprobar el código para determinar si efectivamente el proyecto tiene líneas que se repiten.
  • Una vez que se ha identificado el fragmento que está duplicado, es necesario estudiar la mejor manera de ubicarlo para evitar que se ejecute dos o más veces.
  • Luego de hacer el cambio, realizar las pruebas necesarias para verificar que el resultado que esperamos se mantiene, pese a la nueva estructura que le hemos dado al código.

Ahora que hemos aprendido algunas generalidades con respecto a la técnica consolidate duplicate, es el momento de ver de cerca un ejemplo de programación que contiene código duplicado. 

package consolidate;

class Descuento {
    double precioBase;
    int edadCliente;

    public Descuento(double precioBase, int edadCliente) {
        this.precioBase = precioBase;
        this.edadCliente = edadCliente;
    }

    double precioArt() {
        double precioTotal = 0;
        if (edadCliente >= 80) {
            precioTotal = precioBase - (precioBase * 0.25);
            mensaje(); //invocamos el método mensaje una vez
            return precioTotal;
        } else {
            precioTotal = precioBase - (precioBase * 0.10);
            mensaje(); //invocamos el método mensaje de nuevo
            return precioTotal;
        }

    }

    public void mensaje() {
        System.out.println("¡Felicidades, tiene un descuento!");
    }
    public static void main(String[] args) {
        Descuento obj1 = new Descuento(100, 80);
        System.out.println("Precio:" + obj1.precioBase);
        System.out.println("Su total es: " + obj1.precioArt());

    }

}

El método ‘mensaje’ es llamado en dos oportunidades, y podría obtenerse el mismo resultado invocándolo solo una vez, como se ve en la siguiente modificación: 

package consolidate;

class Descuento {
    double precioBase;
    int edadCliente;

    public Descuento(double precioBase, int edadCliente) {
        this.precioBase = precioBase;
        this.edadCliente = edadCliente;
    }

    double precioArt() {
        double precioTotal = 0;
        if (edadCliente >= 80) {
            precioTotal = precioBase -  (precioBase * 0.25);
        } else {
            precioTotal = precioBase - (precioBase * 0.10);
        }

        /*invocamos el método correspondiente 
         * y mostramos el resultado de
         calcular el descuento.
         */

        mensaje();
        return precioTotal;
    }

    public void mensaje() {
        System.out.println("¡Felicidades, tiene un descuento!");
    }

    public static void main(String[] args) {
        Descuento obj1 = new Descuento(100, 80);
        System.out.println("Precio:" + obj1.precioBase);
        System.out.println("Su total es: " + obj1.precioArt());

    }

}

Este es un ejemplo que solo cumple fines didácticos para mostrar cómo podemos mejorar el código de nuestros proyectos refactorizando con la técnica consolidate duplicate.

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