Last active
October 12, 2025 12:39
-
-
Save antonmry/5b90ae04a46411227fe9a6b29f9233c8 to your computer and use it in GitHub Desktop.
Ejemplo del nuevo switch exhaustivo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
enum TipoHabitacion { | |
// Esta es la clave: qué pasa cuando añades un nuevo tipo de habitación? | |
//Free(0.0f), | |
Lowcost(50.0f), | |
Doble(100.0f), | |
Suite(200.0f); | |
private final float coste; | |
TipoHabitacion(float c) { | |
this.coste = c; | |
} | |
public float getPrice() { | |
return this.coste; | |
} | |
} | |
public class GestionHabitaciones { | |
public static String getDescripcionMal(TipoHabitacion habitacion) { | |
String descripcion = "bug"; | |
switch (habitacion) { | |
case Lowcost: | |
descripcion = "La opción más económica. Precio: " + habitacion.getPrice() + "€"; | |
break; | |
case Doble: | |
descripcion = "Habitación estándar doble. Precio: " + habitacion.getPrice() + "€"; | |
break; | |
case Suite: | |
descripcion = "Lujo con servicios adicionales. Precio: " + habitacion.getPrice() + "€"; | |
break; | |
} | |
// Este código devuelve un resultado incorrecto, no rompe | |
// ni en compilación ni en ejecución. | |
return descripcion; | |
} | |
public static String getDescripcionRegular(TipoHabitacion habitacion) { | |
return switch (habitacion) { | |
case Lowcost -> "La opción más económica. Precio: " + habitacion.getPrice() + "€"; | |
case Doble -> "Habitación estándar doble. Precio: " + habitacion.getPrice() + "€"; | |
case Suite -> "Lujo con servicios adicionales. Precio: " + habitacion.getPrice() + "€"; | |
default -> "Caso no contemplado"; | |
}; | |
// El default al menos nos obliga a gestionar el caso en que aparece un | |
// nuevo tipo de habitación. | |
} | |
public static String getDescripcion(TipoHabitacion habitacion) { | |
return switch (habitacion) { | |
case Lowcost -> "La opción más económica. Precio: " + habitacion.getPrice() + "€"; | |
case Doble -> "Habitación estándar doble. Precio: " + habitacion.getPrice() + "€"; | |
case Suite -> "Lujo con servicios adicionales. Precio: " + habitacion.getPrice() + "€"; | |
}; | |
// Esto es lo perfecto. El programa directamente no compila, obligándonos a | |
// arreglarlo y haciendo imposible que se nos pase. Esa garantía no la | |
// tenemos si definimos esos valores en constantes, ficheros de configuración, | |
// o similares. | |
// | |
// Con todo, depende del contexto: si sabemos que no se van a añadir | |
// nuevos tipos de habitaciones, esto es algo overkill. | |
// | |
// Si el precio cambia dinámicamente, aún podemos usar esta opción pero | |
// sin meter el precio en el enum, usándolo solo como key para recuperar | |
// el precio dinámicamente. | |
} | |
public static void main(String[] args) { | |
System.out.println(getDescripcion(TipoHabitacion.Lowcost)); | |
System.out.println(getDescripcion(TipoHabitacion.Doble)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment