Curse of Coding

Switch

Bienvenido a la sección de switch en C++, donde aprenderás a usar esta estructura de control para tomar decisiones basadas en diferentes valores.

En el tema anterior hablamos de los condicionales, y vimos que podemos usarlos para tomar decisiones basadas en diferentes valores incluyendo n cantidad de condicionales usando else if. Esto a primera vista es una solución válida, pero puede volverse poco legible si tenemos muchos valores diferentes.

Vamos a tomar de referencia el objeto Birthright Birthright el cuál tiene un efecto diferente dependiendo del personaje con el que estemos jugando.

Usando condicionales, nuestro código luciría de la siguiente manera:

c++
1#include <iostream>
2
3using namespace std;
4
5int main() {
6 string character = 1;
7
8 // Consideremos el siguiente menú
9 // 1. Isaac
10 // 2. Magdalene
11 // 3. Cain
12 // 4. Judas
13 // 5. Blue Baby
14 // 6. Eve
15
16 if (character == 1) {
17 // Efecto de Isaac
18 } else if (character == 2) {
19 // Efecto de Magdalene
20 } else if (character == 3) {
21 // Efecto de Cain
22 } else if (character == 4) {
23 // Efecto de Judas
24 } else if (character == 5) {
25 // Efecto de Blue Baby
26 } else if (character == 6) {
27 // Efecto de Eve
28 } else if ... {
29 // Resto de efectos de los 34 personajes
30 }
31
32 return 0;
33}

Como puedes notar esto es una tarea muy repetitiva que puede salirse de las manos muy fácilmente, es por eso que con switch podemos simplificar este código.

c++
1#include <iostream>
2
3using namespace std;
4
5int main() {
6 string character = 1;
7
8 // Consideremos el siguiente menú
9 // 1. Isaac
10 // 2. Magdalene
11 // 3. Cain
12 // 4. Judas
13 // 5. Blue Baby
14 // 6. Eve
15
16 switch (character) {
17 case 1:
18 // Efecto de Isaac
19 break;
20 case 2:
21 // Efecto de Magdalene
22 break;
23 case 3:
24 // Efecto de Cain
25 break;
26 case 4:
27 // Efecto de Judas
28 break;
29 case 5:
30 // Efecto de Blue Baby
31 break;
32 case 6:
33 // Efecto de Eve
34 break;
35 default:
36 // En caso de no existir, realiza esto
37 break;
38 }
39
40 return 0;
41}

Ahora nuestro código luce más legible sin tantos if-else, vamos con la explicación de cada parte del switch.

La sintaxis del switch se compone de las siguientes partes:

Cuando el parámetro coincide con un caso, se ejecuta el código correspondiente a ese caso y la instrucción break le dice al programa que se ha terminado el proceso del switch y lo finaliza.

NOTA

Si olvidamos colocar el break en un caso, el programa continuará ejecutando el siguiente caso hasta encontrar un break o terminar el switch, esto se conoce como fallthrough. Acá te dejo un ejemplo:

c++
1#include <iostream>
2
3using namespace std;
4
5int main() {
6 int pickup = 2;
7
8 // Consideremos el siguiente menú
9 // 1. Bomba
10 // 2. Llave
11 // 3. Moneda
12
13 switch (pickup) {
14 case 1:
15 cout << "Tomaste 1 Bomba" << endl;
16 break;
17 case 2:
18 cout << "Tomaste 1 Llave" << endl;
19 case 3:
20 cout << "Tomaste 1 Moneda" << endl;
21 break;
22 default:
23 // No tomar nada
24 break;
25 }
26
27 return 0;
28}

En este ejemplo, al seleccionar la opción 2 (Llave), se mostrará "Tomaste 1 Llave" y "Tomaste 1 Moneda" porque no hay un break después del case 2.

Otra de las características del switch es que podemos aplicar el mismo código para múltiples casos:

c++
1#include <iostream>
2
3using namespace std;
4
5int main() {
6 int enemy = 2;
7
8 // Consideremos el siguiente menú
9 // 1. Monstro
10 // 2. The Bloat
11 // 3. The Fallen
12
13 switch (enemy) {
14 case 1:
15 case 2:
16 case 3:
17 cout << "Skill Issue!" << endl;
18 break;
19 default:
20 // No hacer nada
21 break;
22 }
23
24 return 0;
25}

No importa si el enemigo es 1, 2 o 3, ¡Todos son skill issues!

NOTA

Los valores que puedes utilizar en un switch deben ser enteros (int) o caracteres (char). No puedes usar variables o expresiones complejas. En algunos puedes llegar a ver booleanos, pero realmente no tiene mucho sentido y aunque se pueda, para un booleano es más común simplemente ver un if else.

Sala de desafío #3

Azazel nos acompaña en la sala de desafío de hoy, ¡Espero estés preparado!

Azazel
vanilla/Azazel.png
black Heartblack Heartblack Heart
Azazel Damage3.5
Azazel Tears0.5

Desarrolla un programa en C++ que:

Considerando el siguiente menú:

1: Monstro Monstro 250 HP

2: The Bloat The Bloat 450 HP

3: The Matriarch The Matriarch 700 HP

Daño Final = (Objetos * 10) * 3.5

Azazel vs [Nombre del Jefe].

DEAR DIARY, TODAY I DIED, I was killed by this thing! [Nombre del Jefe].

¡Esperemos que no tengas un Skill Issue con este desafío! Etiquetame si sobreviviste.

CondicionalesCiclos