Un caso de uso popular para la coincidencia de patrones con switch es cuando se trabaja con diferentes tipos de datos en un programa. Considere el siguiente ejemplo de una clase WeatherStation que tiene diferentes tipos de sensores y devuelve la temperatura actual:
`Estación meteorológica de clase pública {
private Sensor sensor; public double getCurrentTemperature() { return switch (sensor) { case TemperatureSensor t -> t.reading(); case HumiditySensor h -> h.reading() * 0.9; // apply a 10% moisture correction default -> 0.0; // in case of an unhandled sensor type, return 0 }; }
}
`
Aquí, podemos ver que se usa una interfaz de sensor para la expresión del selector, y las etiquetas de caso usan patrones basados en implementaciones de sensores específicas: TemperatureSensor y HumiditySensor. Esto permite una forma más concisa y legible de manejar diferentes tipos de datos en la declaración de cambio.
Otro caso de uso para la coincidencia de patrones con switch es cuando se trata de enumeraciones. Antes de que se introdujera la coincidencia de patrones, las enumeraciones solo podían usarse como constantes en etiquetas de casos, lo que restringía los valores que se podían probar en una declaración de cambio. Con la nueva función, las enumeraciones ahora se pueden calificar en etiquetas de casos, lo que permite una coincidencia más precisa y flexible.
dirección de enumeración pública {
NORTE,
ESTE,
SUR,
OESTE
}
movimiento de vacío público (Dirección dirección) {
cambiar (dirección) {
caso NORTE, NORTE_OESTE, NORTE_ESTE -> moverArriba();
caso EAST, EAST_NORTH, EAST_SOUTH -> moverDerecha();
caso SUR,SUR_ESTE,SUR_OESTE -> moverAbajo();
caso OESTE, OESTE_NORTE, OESTE_SUR -> moverIzquierda();
}
}
Aquí, el método move() utiliza una instrucción de cambio para manejar fácilmente el movimiento en diferentes direcciones según el valor de enumeración de Dirección especificado. Con la coincidencia de patrones, también podemos especificar combinaciones direccionales, como NORTH_WEST y EAST_SOUTH, lo que hace que nuestro código sea más robusto y flexible.
Finalmente, veamos un ejemplo de cómo la coincidencia de patrones puede ayudar con el manejo de errores en una declaración de cambio. En el cambio tradicional, si la expresión del selector no coincide con ninguna de las etiquetas de caso, se puede usar un caso predeterminado para manejar el error. Sin embargo, esto puede resultar tedioso cuando se trata de varias etiquetas de casos y puede provocar la duplicación de código. En la coincidencia de patrones, se genera una excepción si ninguno de los patrones de etiquetas de casos coincide con la expresión del selector, lo que hace que el manejo de errores sea más uniforme y menos propenso a errores.
cadena pública getPlanetaryObject(cuerpo PlanetaryBody) {
interruptor de retorno (cuerpo) {
case Planet p && p.getMass() > 1e29 -> p.getName() " es un gigante gaseoso";
case Planet p && p.getMass() > 1e23 -> p.getName() " es un planeta rocoso";
case Star s && s.getLuminosity() > 1e32 -> s.getName() " es una estrella brillante";
case Star s && s.getLuminosity() s.getName() " es una estrella tenue";
predeterminado -> throw new MatchException("No se puede determinar el tipo de objeto planetario: " body.getName());
};
}
En este ejemplo, el método getPlanetaryObject() toma un objeto PlanetaryBody, que puede ser un planeta o una estrella. Los patrones utilizados en las etiquetas de las cajas consideran condiciones adicionales, como la masa del planeta o la luminosidad de la estrella. Si ninguno de los patrones coincide, se genera una MatchException, lo que hace que el manejo de errores sea más consistente y evita posibles errores.
Conclusión
La coincidencia de patrones para switch es una de las características más importantes introducidas en Java en los últimos tiempos. Permite estructuras de flujo de control más flexibles y concisas.
Mejora tus habilidades en Java obteniendo la certificación de desarrollador certificado profesional Java SE 21.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3