csharp-condicional-switch

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

El condicional switch es una estructura de control en C# que proporciona una forma de ejecutar diferentes bloques de código según el valor de una expresión.

El condicional switch permite evaluar el valor de una expresión y ejecutar bloques de código específicos basados en diferentes valores posibles de esa expresión.

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

Sintaxis básica

La sintaxis básica de un condicional switch en C# es la siguiente:

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;
    ...
    default:
        // Código a ejecutar si expresion no coincide con ningun caso
        break;
}
  • expresión: Es la expresión cuyo valor se evalúa en cada caso
  • case: Representa un valor específico que se compara con la expresión
  • default: Opcionalmente, se puede incluir un bloque default

El bloque default se ejecutará si ninguno de los casos anteriores coincide con el valor de la expresión (es opcional, pero lo más normal es que lo tengamos).

Vamos a verlo con un ejemplo sencillo simple donde se utiliza un condicional switch para imprimir un número en pantalla.

int numero = 2;

switch (numero)
{
    case 1:
        Console.WriteLine("Uno");
        break;
    case 2:
        Console.WriteLine("Dos");
        break;
    case 3:
        Console.WriteLine("Tres");
        break;
    default:
        Console.WriteLine("Número no válido");
        break;
}

En este caso, en función de lo que valga numero

  • 1, 2 y 3 imprimirán el número correspondiente en pantalla.
  • Cualquier otro número mostrará “Número no válido”.

Fall-Through entre casos

El Fall-Through es la posibilidad de “caer” de un caso a otro, y ejecutar varias sentencias de código. A diferencia de otros lenguajes (como C++), el “fall-through” en C# está intencionadamente limitado.

En C# todos los bloques deben

  • O estar vacíos
  • O tener una sentencia break

Es decir, no es posible hacer esto, omitiendo el break en un caso,

case 1:
	Console.WriteLine("Uno");
	// no puedo no poner `break`
case 2:
	Console.Writeline("Dos");
// mas casos

Sí sería posible si los case están totalmente vacíos. Así

switch (numero)
{
    case 1:
    case 2:
    case 3:      
        Console.WriteLine("Menor que 3");
        break;
    default:
        Console.WriteLine("Mayor que 3");
        break;
}

Aunque, muy probablemente, sea una mala idea hacerlo 😉.

Ejemplos prácticos

Determinar el nombre de un número

En este ejemplo, utilizamos la estructura switch para determinar el nombre de un número según su valor.

int numero = 2;

// Utilizamos switch para determinar el nombre del número según su valor
switch (numero)
{
    case 1:
        Console.WriteLine("Uno");
    case 2:
        Console.WriteLine("Dos");
        break;
    case 3:
        Console.WriteLine("Tres");
        break;
    default:
        Console.WriteLine("Número no válido");
        break;
}

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

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

char operador = '+';

// Utilizamos switch para determinar la operación matemática según el operador
switch (operador)
{
    case '+':
        Console.WriteLine("Suma");
        break;
    case '-':
        Console.WriteLine("Resta");
        break;
    case '*':
        Console.WriteLine("Multiplicación");
        break;
    case '/':
        Console.WriteLine("División");
        break;
    default:
        Console.WriteLine("Operador no válido");
        break;
}

Determinar el nombre de un día de la semana

Este ejemplo muestra cómo determinar el nombre de un día de la semana utilizando una estructura switch.

int dia = 3;

// Utilizamos switch para determinar el nombre del día según su valor
switch (dia)
{
    case 1:
        Console.WriteLine("Lunes");
        break;
    case 2:
        Console.WriteLine("Martes");
        break;
    case 3:
        Console.WriteLine("Miércoles");
        break;
    // Agregamos casos para los días restantes...
    default:
        Console.WriteLine("Día no válido");
        break;
}

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

Aquí se utiliza un switch para determinar el nombre de un mes según su valor en una enumeración.

// Definimos una enumeración para los meses del año
enum Meses { Enero = 1, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre }

// Declaramos una variable de la enumeración para representar el mes
Meses mes = Meses.Mayo;

// Utilizamos switch para determinar el nombre del mes según su valor en la enumeración
switch (mes)
{
    case Meses.Enero:
        Console.WriteLine("Enero");
        break;
    case Meses.Febrero:
        Console.WriteLine("Febrero");
        break;
    // Agregamos casos para los meses restantes...
    default:
        Console.WriteLine("Mes no válido");
        break;
}

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