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...