Saltar al contenido

Un recorrido exhaustivo de las declaraciones condicionales de C# Parte 2 – cambio

Escenario

Imagina este escenario:

Una declaración switch es la mejor solución a este problema.

Un recorrido exhaustivo de las declaraciones condicionales de C# Parte 2 – cambio
Un recorrido exhaustivo de las declaraciones condicionales de C# Parte 2 – cambio

Sintaxis

La declaración «switch» se utiliza a menudo como alternativa a «if-else» si se prueba una sola expresión contra tres o más condiciones.

Por convención, aprenderemos primero la sintaxis de la declaración del interruptor.

1234567891011121314switch(expression){caso valor1: code_block1;break;case value2:case value3: code_block2;break;...default: code_blockN;break;}

csharp

La sentencia switch permite la expresión para controlar el flujo de la ejecución del programa a través de una rama multidireccional. Normalmente, contiene un grupo de ramas de casos y una rama por defecto:

  • La expresión es la puerta que conduce a todas las ramas. Antes de C# 7.0, debe ser una de char, string, bool, int-like, y enum. Después, la expresión puede ser cualquier expresión no nula.
  • es un candidato de expresión. Si coincide con la expresión, se elige esta rama.
  • code_block representa la lógica de la rama actual. Si está vacía, caerá en la siguiente rama. Si no, debe ser seguido por una sentencia de salto, como break. Aprenderemos las declaraciones de salto en otra guía.
  • por defecto es la rama lógica por defecto cuando ninguno de los valores de las mayúsculas y minúsculas coincide con la expresión. Puede ser omitida si te aseguras de que el valor en mayúsculas y minúsculas cubra todos los espacios de solución o si no te preocupas por el resto de las situaciones.

Diagrama de flujo

Por favor, echa un vistazo al diagrama de flujo del interruptor. Muestra el control del flujo de forma intuitiva.

A través del diagrama de flujo anterior, podemos averiguar el proceso de ejecución del cambio:

  1. Usa el valor del caso para igualar la expresión.
  2. Si un valor coincide, comprueba si tiene code_block:Si lo tiene, ejecútalo y sal. Si no, caiga hasta que encuentre un code_block.
  3. Si no hay coincidencias de valores, elija la rama por defecto. Si el valor por defecto no existe, salga directamente.

Práctica

Ya que hemos aprendido el mecanismo del interruptor, es hora de resolver un problema de ejemplo:

123456789101112131415 cadena de semáforos ="Amarillo";// lógica de división basada en trafficLightswitch(semáforo){caso "Verde": Console.WriteLine("pasar suavemente");break;case "Yellow":// caen a través de la ramificación "Roja""Red": Console.WriteLine("frenar y detener");break;default:// condiciones de reposo Console.WriteLine("reconocer fallas, notificar al conductor para decidir");break;}

csharp

Características avanzadas

Hemos aprendido las características esenciales del cambio. Esto debería ser suficiente para la mayoría de los casos de su trabajo.

Pero todavía hay algunas características avanzadas, como el patrón de tipo en la coincidencia de patrones (usamos patrón constante ) o el uso de la cláusula «when» en caso de que. Puedes consultar la documentación oficial si estás interesado en saber más.

interruptor vs. Paralelo if-else

Tanto el cambio como el paralelismo crean múltiples ramas.

El if-else paralelo es más poderoso porque la condición puede ser diferente y complicada en cada rama. En cambio, el cambio es más sencillo y legible.

Así que para la situación de múltiples sucursales, damos prioridad al cambio. Si el cambio es incapaz de cumplir esta tarea, usamos alternativamente el «if-else» paralelo.

Además, otro factor a considerar es la complejidad de code_block. Aunque el interruptor es capaz de mantener la lógica tan compleja como si fuera otra cosa, se prefiere la lógica simple. Para la lógica compleja, tendemos a usar if-else, o encapsular en un método.