Codigo limpio y refactorización
Los bloques switch extensos pueden ser difíciles de mantener. Una alternativa más limpia es usar estructuras de datos como objetos o mapas.
Ejemplo Malo:
1switch (tipo) { 2 case "sumar": 3 return a + b; 4 case "restar": 5 return a - b; 6 default: 7 return 0; 8}
Problema: Los bloques
switchoif-elseextensos son propensos a errores y difíciles de escalar.
Solución: Usar estructuras como mapas permite que el código sea más escalable y limpio.
Ejemplo Bueno:
1Map<String, Function<Integer, Integer>> operaciones = Map.of( 2 "sumar", (a, b) -> a + b, 3 "restar", (a, b) -> a - b 4); 5return operaciones.getOrDefault(tipo, (a, b) -> 0).apply(a, b);
Ejemplo, eliminación de switch mediante clases y herencia.
Ejemplo Malo:
1public void calcularGolpe(Jugador atacante, Jugador atacado) { 2 double golpe = 0; 3 4 switch (atacante.tipo) { 5 case "guerrero": 6 golpe = 10 * atacante.experiencia * Math.random(); 7 break; 8 case "mago": 9 golpe = 8 * atacante.experiencia * Math.random(); 10 break; 11 case "ladron": 12 golpe = 4 * atacante.experiencia * Math.random(); 13 break; 14 default: 15 System.out.println("Tipo de atacante no reconocido"); 16 return; 17 } 18}
Ejemplo Bueno:
Mediante Herencia y Polimorfismo creamos una clase base Jugador y subclases específicas para cada tipo de personaje. Cada subclase implementa su propia lógica para calcular el golpe, eliminando la necesidad de usar un switch.
1abstract class Jugador { 2 protected String tipo; 3 protected int experiencia; 4 protected double vida; 5 6 public Jugador(String tipo, int experiencia, double vida) { 7 this.tipo = tipo; 8 this.experiencia = experiencia; 9 this.vida = vida; 10 } 11 12 public abstract double calcularGolpe(); 13} 14 15class Guerrero extends Jugador { 16 public Guerrero(int experiencia, double vida) { 17 super("guerrero", experiencia, vida); 18 } 19 20 @Override 21 public double calcularGolpe() { 22 return 10 * experiencia * Math.random(); 23 } 24} 25 26class Mago extends Jugador { 27 public Mago(int experiencia, double vida) { 28 super("mago", experiencia, vida); 29 } 30 31 @Override 32 public double calcularGolpe() { 33 return 8 * experiencia * Math.random(); 34 } 35} 36 37class Ladron extends Jugador { 38 public Ladron(int experiencia, double vida) { 39 super("ladron", experiencia, vida); 40 } 41 42 @Override 43 public double calcularGolpe() { 44 return 4 * experiencia * Math.random(); 45 } 46}
- Loading...