cpp-condicional-switch

Qué es y cómo usar el condicional SWITCH en C++

El condicional switch en C++ es una estructura de control que permite ejecutar diferentes bloques de código en función del valor de una expresión.

A veces es una alternativa más limpia y legible a una serie de instrucciones if-else anidadas. Aunque, mucha gente opina (yo incluido), en lugar de mejorar la legibilidad, frecuentemente la empeora

Sintaxis básica

La sintaxis básica de un condicional switch en C++ es:

switch (expresion) {
    case valor1:
        // Código a ejecutar si expresion es igual a valor1
        break;
    case valor2:
        // Código a ejecutar si expresion es igual a valor2
        break;
    // Puedes añadir más casos aquí
    default:
        // Código a ejecutar si expresion no coincide con ningún caso
        break;
}
  • expresión: Es la expresión cuyo valor se evalúa y compara con los valores de los casos.
  • case: Cada case representa un valor específico que se compara con la expresión.
  • default: Es un bloque opcional que se ejecuta si ningún case coincide con el valor de la expresión.

Vamos a ver un ejemplo básico de uso del switch:

#include <iostream>

int main() {
    int numero = 2;

    switch (numero) {
        case 1:
            std::cout << "Uno" << std::endl;
            break;
        case 2:
            std::cout << "Dos" << std::endl;
            break;
        case 3:
            std::cout << "Tres" << std::endl;
            break;
        default:
            std::cout << "Número no válido" << std::endl;
            break;
    }

    return 0;
}

En este ejemplo,

  • Dependiendo del valor de numero, el programa imprimirá el número correspondiente en la consola.
  • Si el valor no coincide con ninguno de los casos definidos, se imprimirá Número no válido.

Fall-Through entre Casos

En C++ no es obligatorio incluir un break al final de cada case (a diferencia de otros lenguajes como C#).

Si se omite el break, el flujo del programa continuará ejecutando el código de los siguientes case (esto se conoce como “fall-through”).

#include <iostream>

int main() {
    int numero = 2;

    switch (numero) {
        case 1:
        case 2:
        case 3:
            std::cout << "Número entre 1 y 3" << std::endl;
            break;
        default:
            std::cout << "Número no válido" << std::endl;
            break;
    }

    return 0;
}

En este ejemplo,

  • Tanto los casos 1, 2 y 3 ejecutarán el mismo bloque de código y después terminarán con el break.

Aunque esto puede ser útil en algunos casos, también puede llevar a errores si no se maneja con cuidado

En general, no lo hagáis :::

Ejemplos prácticos

determinar el nombre de un número

En este ejemplo, usamos el switch para determinar el nombre de un número basado en su valor.

#include <iostream>

int main() {
    int numero = 2;

    switch (numero) {
        case 1:
            std::cout << "Uno" << std::endl;
            break;
        case 2:
            std::cout << "Dos" << std::endl;
            break;
        case 3:
            std::cout << "Tres" << std::endl;
            break;
        default:
            std::cout << "Número no válido" << std::endl;
            break;
    }

    return 0;
}

Determinar la operación matemática según el operador

Este código muestra cómo usar switch para seleccionar la operación matemática según el operador proporcionado.

#include <iostream>

int main() {
    char operador = '+';

    switch (operador) {
        case '+':
            std::cout << "Suma" << std::endl;
            break;
        case '-':
            std::cout << "Resta" << std::endl;
            break;
        case '*':
            std::cout << "Multiplicación" << std::endl;
            break;
        case '/':
            std::cout << "División" << std::endl;
            break;
        default:
            std::cout << "Operador no válido" << std::endl;
            break;
    }

    return 0;
}

Determinar el nombre de un día de la semana

Aquí, usamos un switch para determinar el nombre del día de la semana basado en su número.

#include <iostream>

int main() {
    int dia = 3;

    switch (dia) {
        case 1:
            std::cout << "Lunes" << std::endl;
            break;
        case 2:
            std::cout << "Martes" << std::endl;
            break;
        case 3:
            std::cout << "Miércoles" << std::endl;
            break;
        // Agregar más casos para otros días
        default:
            std::cout << "Día no válido" << std::endl;
            break;
    }

    return 0;
}

Determinar el nombre de un mes (con enumeración)

En este ejemplo, usamos un switch para determinar el nombre de un mes según su valor en una enumeración.

#include <iostream>

enum Meses { Enero = 1, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre };

int main() {
    Meses mes = Mayo;

    switch (mes) {
        case Enero:
            std::cout << "Enero" << std::endl;
            break;
        case Febrero:
            std::cout << "Febrero" << std::endl;
            break;
        // Agregar más casos para otros meses
        default:
            std::cout << "Mes no válido" << std::endl;
            break;
    }

    return 0;
}

Estos ejemplos tienen el propósito de mostrar cómo utilizar el condicional Switch. No significa que sea la mejor forma de resolver el problema que abordan. Lo normal es que haya alternativas mejores