Codigo limpio y refactorización

El código duplicado es uno de los problemas más comunes. Repetir bloques similares en diferentes partes del programa hace que sea difícil mantener y actualizar el código. Nos basamos en el principio DRY (Don't Repeat Yourself) para evitar la duplicación.

Ejemplo Malo:

1public double calcularAreaRectangulo(double ancho, double alto) {
2    return ancho * alto;
3}
4
5public double calcularAreaCuadrado(double lado) {
6    return lado * lado;
7}

Problema: Código duplicado para calcular áreas con fórmulas similares.

Solución: Una única función genérica elimina la duplicación.

Ejemplo Bueno:

1public double calcularAreaRectangulo(double ancho, double alto) {
2  return ancho * alto;
3}
4
5public double calcularAreaCuadrado(double lado) {
6  return calcularAreaRectangulo(lado, lado); // Reutiliza el método de rectángulo
7}

Ejemplo

Vamos a ver un ejemplo de código duplicado en el que se pide al usuario la base y la altura de dos triángulos para calcular su área.

Ejemplo Malo:

1void miMetodo() {
2  Scanner lector = new Scanner(System.in);
3
4  System.out.println("Inserta la base");
5  int base = lector.nextInt();
6
7  System.out.println("Inserta la altura");
8  int altura = lector.nextInt();
9
10  float r1 = base * altura / 2.0f;
11  System.out.println("El area es "+ r1);
12
13
14  System.out.println("Inserta la base");
15  base = lector.nextInt();
16
17  System.out.println("Inserta la altura");
18  altura = lector.nextInt();
19
20  float r2 = base * altura / 2.0f;
21  System.out.println("El area es "+ r1);
22  lector.close();
23}

Ejemplo Bueno:

Separamos el código duplicado en varias funciones

Solución:

  • Eliminación de Duplicación: Se reutiliza una función para calcular el área y otra para solicitar valores.
  • Legibilidad y Modularidad: Cada funcionalidad está encapsulada en una función específica.
  • Adaptación al Lenguaje: Se utilizan las herramientas propias de cada lenguaje para manejar la entrada de datos.
  • Extensibilidad: Fácil de ampliar a más cálculos o figuras geométricas sin duplicar lógica.
1import java.util.Scanner;
2
3public class AreaCalculator {
4    private static float calcularArea(int base, int altura) {
5        return base * altura / 2.0f;
6    }
7
8    private static int solicitarValor(String mensaje, Scanner lector) {
9        System.out.println(mensaje);
10        return lector.nextInt();
11    }
12
13    public static void miMetodo() {
14        Scanner lector = new Scanner(System.in);
15
16        for (int i = 1; i <= 2; i++) {
17            System.out.println("Cálculo de área " + i);
18            int base = solicitarValor("Inserta la base", lector);
19            int altura = solicitarValor("Inserta la altura", lector);
20
21            float area = calcularArea(base, altura);
22            System.out.println("El área es: " + area);
23        }
24
25        lector.close();
26    }
27
28    public static void main(String[] args) {
29        miMetodo();
30    }
31}
  • Loading...