Java: Estructura Switch
Muchos lenguajes utilizan no solo la estructura condicional if
, sino también switch
en adición a ella. La estructura switch
es una versión especializada de if
, creada para algunas situaciones particulares.
Por ejemplo, se debe utilizar cuando hay una cadena de if else
con comprobaciones de igualdad:
if (status.equals("processing")) {
// Hacer algo
} else if (status.equals("paid")) {
// Hacer algo más
} else if (status.equals("new")) {
// Hacer algo más
} else {
// Hacer algo más
}
Esta comprobación compuesta tiene una característica distintiva: cada rama aquí es una comprobación del valor de la variable status
. La estructura switch
permite escribir este código de forma más corta y expresiva:
switch (status) {
case "processing":
// Hacer algo
break;
case "paid":
// Hacer algo más
break;
case "new":
// Hacer algo más
break;
default: // else
// Hacer algo más
}
En términos de cantidad de elementos, switch
es una estructura bastante compleja. Incluye:
- Una declaración externa con la palabra clave
switch
. Tiene dos elementos:- Una variable, cuyos valores serán utilizados por
switch
para seleccionar el comportamiento - Llaves para los casos de selección
- Una variable, cuyos valores serán utilizados por
- Las construcciones
case
ydefault
, dentro de las cuales se describe el comportamiento para diferentes valores de la variable considerada. Cadacase
corresponde a unif
, como en el ejemplo anterior. Aquí,default
es una situación especial que corresponde a la ramaelse
en las estructuras condicionales. Al igual que conelse
, no es obligatorio especificardefault
. - La construcción
break
, que evita la "caída". Si no se especifica, después de ejecutar elcase
necesario, la ejecución pasará al siguientecase
. Este ciclo se repetirá hasta elbreak
más cercano o hasta el final delswitch
.
Las llaves en switch
no definen un bloque de código, como en otros lugares. Dentro de ellas solo se permite la sintaxis que se muestra arriba, donde se pueden utilizar case
o default
. Pero dentro de cada case
(y default
) la situación es diferente. Aquí se puede ejecutar cualquier código arbitrario:
switch (count) {
case 1:
// Hacer algo útil
break;
case 2:
// Hacer algo útil
break;
default:
// Hacer algo
}
A veces, el resultado obtenido dentro de un case
es el final de la ejecución del método que contiene el switch
. En este caso, es necesario devolverlo de alguna manera al exterior. Para resolver esta tarea, hay dos formas.
La primera forma es crear una variable antes del switch
, llenarla en los case
y luego devolver el valor de esta variable al exterior:
class App {
public static String getExplanation(int count) {
// Declarar la variable
String result;
// Llenarla
switch(count) {
case 1:
result = "uno";
break;
case 2:
result = "dos";
break;
default:
result = null;
}
// Devolverla
return result;
}
}
La segunda forma es más simple y corta. En lugar de crear una variable, se puede utilizar case
, dentro del cual se puede hacer un retorno normal del método. Después de return
, no se ejecuta ningún código, por lo que podemos eliminar el break
:
class App {
public static String getExplanation(int count) {
switch(count) {
case 1:
return "uno";
case 2:
return "dos";
default:
return null;
}
}
}
https://replit.com/@hexlet/java-basics-switch
Aunque switch
se encuentra en el código, técnicamente siempre se puede prescindir de él.
La utilidad de esta estructura radica en que expresa mejor la intención del programador cuando se necesita comprobar valores específicos de una variable. A diferencia de los bloques else if
, el código con switch
es un poco más largo, pero mucho más fácil de leer.
Tarea
Implementa el método getNumberExplanation()
, que recibe un número como entrada y devuelve una explicación para ese número. Si no hay una explicación para el número, se devuelve just a number
. Solo hay explicaciones para los siguientes números:
- 666 - devil number
- 42 - answer for everything
- 7 - prime number
Ejemplos de llamadas a la función:
App.getNumberExplanation(8); // just a number
App.getNumberExplanation(666); // devil number
App.getNumberExplanation(42); // answer for everything
App.getNumberExplanation(7); // prime number
¿El ejercicio no pasa la prueba, qué debo hacer? 😶
Si te quedaste atascado, es el momento perfecto para hacer una pregunta en las "Discusiones".
* Asegúrate de incluir la salida de las pruebas. Sin ella, es casi imposible entender qué está mal, incluso si muestras tu código. Los programadores tienen dificultades para ejecutar el código en su mente, pero casi siempre es posible entender a dónde mirar a partir del error que recibiste.
Mi código funciona en mi entorno, pero no aquí 🤨
Las pruebas están diseñadas de manera que verifican la solución de diferentes maneras y con diferentes datos. A menudo, una solución funciona con ciertos datos de entrada pero no con otros. Para entender este punto, revisa la pestaña "Pruebas" y presta atención a los mensajes de error, que suelen contener pistas.
Mi código es diferente a la solución del profesor 🤔
Esto es normal 🙆. En programación, una tarea puede tener muchas soluciones diferentes. Si tu código pasa la prueba, cumple con los requisitos de la tarea.
En raras ocasiones, la solución puede estar ajustada para pasar las pruebas, pero esto suele ser evidente.
Leí la lección, pero no entendí nada 🙄
Crear materiales de aprendizaje comprensibles para todos es bastante difícil. Hacemos nuestro mejor esfuerzo, pero siempre hay margen para mejorar. Si encuentras material que no entiendes, describe el problema en las "Discusiones". Es ideal si puedes formular los aspectos que no entiendes en forma de preguntas. Por lo general, necesitamos unos días para hacer mejoras.
Por cierto, tú también puedes contribuir a mejorar los cursos: en la parte inferior hay un enlace al código fuente de las lecciones, que se puede modificar directamente en el navegador.