Ejercicio: Implementación de una instrucción switch
- 11 minutos
Una instrucción switch es una instrucción de selección de C# que proporciona una alternativa a una construcción de bifurcación if-elseif-else. La instrucción switch proporciona ventajas sobre una construcción if-elseif-else al evaluar un valor único en una lista de valores coincidentes conocidos.
Considere el caso siguiente:
- Está trabajando en una aplicación relacionada con la nutrición alimentaria. Una sección del código se ocupa de las frutas.
- El código incluye una variable denominada
fruitque se usa para contener el nombre de diferentes tipos de fruta. - Tiene una lista de las 20 frutas en las que se centra la aplicación.
- Quiere bifurcar el código en función del valor asignado a
fruit.
En este escenario, puede usar una switch instrucción para crear una rama independiente para cada tipo de fruta.
¿Cómo funciona una instrucción switch?
La switch instrucción elige una sección de código para ejecutar de una lista de posibles secciones de switch. La sección switch seleccionada se elige en función de una coincidencia de patrón con la expresión de coincidencia de la instrucción.
Tenga en cuenta el ejemplo de código siguiente que muestra la estructura básica de la instrucción switch.
switch (fruit)
{
case "apple":
Console.WriteLine($"App will display information for apple.");
break;
case "banana":
Console.WriteLine($"App will display information for banana.");
break;
case "cherry":
Console.WriteLine($"App will display information for cherry.");
break;
}
La expresión de coincidencia (que también se puede denominar expresión switch) es el valor que sigue a la palabra claveswitch, en este caso(fruit). Cada sección de conmutador se define mediante un patrón de caso. Los patrones de casos se construyen mediante la palabra clave case seguida de un valor. El primer patrón de caso de este ejemplo es: case "apple":. Los patrones de casos son expresiones booleanas que se evalúan como true o false. Cada sección switch incluye un pequeño número de líneas de código que se ejecutarán si el patrón de caso es una coincidencia para la expresión match. En este ejemplo, si a fruit se le asigna un valor de "apple", el primer patrón de caso se evaluará como true y se ejecutará esa sección switch.
Una instrucción switch debe incluir al menos una sección switch, pero normalmente contendrá tres o más secciones switch.
El interruptor se utiliza mejor cuando:
- Tiene un valor único (variable o expresión) que desea que coincida con muchos valores posibles.
- Para cualquier coincidencia determinada, debe ejecutar un par de líneas de código como máximo.
Nota:
Este primer ejemplo de una instrucción switch es simplemente sencillo y el examen de la sintaxis fue breve. Examinarás características adicionales de la switch declaración cuando trabajes en algunos escenarios más avanzados en las secciones siguientes.
Es el momento de preparar el entorno de codificación y empezar a crear tus propias switch instrucciones.
Preparación del entorno de creación de código
Este módulo incluye actividades prácticas que le guían por el proceso de compilación y ejecución de código de demostración. Le recomendamos que complete estas actividades con Visual Studio Code como entorno de desarrollo. El uso de Visual Studio Code para estas actividades le ayudará a familiarizarse con la escritura y la ejecución de código en un entorno de desarrollador que usan los profesionales de todo el mundo.
Abre Visual Studio Code.
Puede usar el menú Inicio de Windows (o un recurso equivalente para otro sistema operativo) para abrir Visual Studio Code.
En Visual Studio Code, en el menú Archivo, seleccione Abrir archivo.
En el cuadro de diálogo Abrir carpeta , vaya a la carpeta Escritorio de Windows.
Si tiene una ubicación de carpeta diferente donde guarda los proyectos de código, úsela. Para este curso, lo importante es tener una ubicación fácil de encontrar y recordar.
En el cuadro de diálogo Abrir carpeta, elija Seleccionar carpeta.
Si ve un cuadro de diálogo de seguridad en el que se le pregunta si confía en los autores, seleccione Sí.
En el menú Terminal de Visual Studio Code, seleccione Nuevo terminal.
Observe que una ventana de comandos en el panel del Terminal muestra la ruta de acceso de la carpeta actual. Por ejemplo:
C:\Users\someuser\Desktop>Nota:
Si está trabajando en su propio equipo, en lugar de en un entorno aislado u hospedado, y ha realizado otros módulos de Microsoft Learn de esta serie de C#, es posible que ya haya creado una carpeta de proyecto para ejemplos de código. Si ese es el caso, puede saltar al paso siguiente, que se usa para crear una aplicación de consola en la carpeta TestProject.
En la terminal, para crear una nueva aplicación de consola en una carpeta especificada, escriba el siguiente comando:
dotnet new console -o ./CsharpProjects/TestProjectEste comando de la CLI de .NET usa una plantilla de programa de .NET para crear un nuevo proyecto de aplicación de consola de C# en la ubicación de carpeta especificada. El comando crea las carpetas CsharpProjects y TestProject y usa TestProject como nombre del archivo
.csproj.Si se muestra un mensaje que indica que los archivos ya existen, continúe con los pasos siguientes. Reutilizará los archivos de proyecto existentes.
En la vista EXPLORER, expanda la carpeta CsharpProjects .
Debería ver la carpeta TestProject y dos archivos, un archivo de programa de C# denominado Program.cs y un archivo de proyecto de C# denominado TestProject.csproj.
En Visual Studio Code, en el menú Archivo, seleccione Abrir archivo.
En el cuadro de diálogo Abrir carpeta , seleccione la carpeta CsharpProjects y, a continuación, seleccione Seleccionar carpeta.
En la vista EXPLORER, expanda la carpeta TestProject y, a continuación, seleccione Program.cs.
Elimine las líneas de código existentes.
Usará este proyecto de consola de C# para crear, compilar y ejecutar ejemplos de código durante este módulo.
Cierre el panel del terminal.
Creación y prueba de una instrucción switch
Asegúrese de que ha abierto Visual Studio Code y de que Program.cs se muestra en el panel Editor.
Nota:
Program.cs debe estar vacío. Si no es así, seleccione y elimine todas las líneas de código.
En el Editor de Visual Studio Code, escriba el código siguiente:
int employeeLevel = 200; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: title = "Junior Associate"; break; case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");En el menú Archivo de Visual Studio Code, seleccione Guardar.
El archivo Program.cs debe guardarse antes de compilar o ejecutar el código.
En el panel EXPLORER, para abrir un terminal en la ubicación de la carpeta TestProject, haga clic con el botón derecho en TestProject y, a continuación, seleccione Abrir en terminal integrado.
Se abrirá un panel del terminal. El terminal debe incluir un símbolo del sistema que muestre que dicho terminal está abierto en la ubicación de la carpeta TestProject.
En la ventana de comandos de Terminal, para ejecutar tu código, escribe dotnet run y presiona la tecla Enter.
Nota:
Si ve un mensaje que indica "No se ha podido encontrar un proyecto para ejecutar", asegúrese de que el símbolo del sistema del terminal muestra la ubicación de carpeta TestProject prevista. Por ejemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Deberías ver la siguiente salida:
John Smith, Senior AssociateTómese un minuto para examinar la instrucción
switchque especificó.Observe que la
switchinstrucción define un único bloque de código.La
switchinstrucción define un único bloque de código que incluye una lista de secciones switch. A la derecha de la palabra claveswitchhay una expresión switch que se incluye entre paréntesis.Fíjese en la lista de secciones de conmutadores dentro del bloque de código.
El bloque de código
switchcontiene una lista de secciones switch, cada una de las cuales incluye una o varias etiquetas de modificador. Además, cada sección switch incluye una lista de instrucciones que se ejecutará si la etiqueta es igual a la expresión switch definida en la parte superior de la instrucción switch.La expresión switch se evalúa con las etiquetas de caso de arriba a abajo hasta que se encuentra un valor igual a dicha expresión. Si ninguna de las etiquetas coincide, se ejecutará la lista de instrucciones para el
defaultcaso. Si no se incluye ningún valor predeterminado, el control se transfiere al punto final de la instrucción switch. Cada etiqueta debe proporcionar un tipo de valor que coincida con el tipo especificado en la expresión switch.Nota:
La etiqueta opcional
defaultpuede aparecer en cualquier posición dentro de la lista de secciones del interruptor. Sin embargo, la mayoría de los desarrolladores eligen ponerla en último lugar porque tiene más sentido (lógicamente) colocardefaultcomo opción final. Independientemente de la posición, ladefaultsección se evaluará por última vez.En el ejemplo:
- la expresión switch es
(employeeLevel) - cada sección de conmutador tiene una sola etiqueta de conmutador (
caseodefault). - La sección switch coincidente se define mediante
case: 200, puesto que existeemployeeLevel = 200.
- la expresión switch es
Tenga en cuenta que cada sección de interruptor está separada de la siguiente.
Solo se puede ejecutar una sección switch. Esto significa que la ejecución de una sección switch no puede "pasar" a la siguiente sección switch. La palabra clave
breakes una de las varias maneras de finalizar una sentencia switch antes de que llegue a la siguiente sentencia. Si olvida la palabra clavebreak(u, opcionalmente, la palabra clavereturn), el compilador genera un error.
Cambie el valor de la variable de nivel para ver cómo la instrucción switch la evalúa.
Para ejercer el caso predeterminado, vamos a cambiar el nivel del empleado modificando la asignación de valores.
Para modificar el valor asignado a
employeeLevel, actualice el código de la siguiente manera:int employeeLevel = 201;Guarde el archivo de código y use Visual Studio Code para ejecutar el código.
Escriba
dotnet rundesde el símbolo del sistema de terminal para ejecutar el código.Observe que la salida ha cambiado.
Ahora, al ejecutar el código, debería ver el título más genérico usado.
John Smith, AssociatePuesto que
employeeLevelno coincide con ninguna etiqueta, se empareja la etiquetadefault.
Modifica una sección de conmutador para incluir varias etiquetas.
Supongamos que nuestra empresa decidió dar a todos los empleados de nivel 100 el título "Senior Associate", el mismo título que los empleados de nivel 200. Como desarrollador, decides implementar esto quitando la primera sección del switch que pertenece a la etiqueta case 100:, y en su lugar, permitir que las etiquetas case 100: y case 200: ejecuten la misma sección de switch.
Para modificar el valor asignado a
employeeLevel, actualice el código de la siguiente manera:int employeeLevel = 100;Para asignar varias etiquetas a la primera sección de conmutador, actualice el código de la siguiente manera:
case 100: case 200: title = "Senior Associate"; break;Cuando haya terminado de realizar cambios, las modificaciones deben coincidir con el código siguiente:
int employeeLevel = 100; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");Guarde el archivo de código y use Visual Studio Code para ejecutar el código.
Escriba
dotnet rundesde el símbolo del sistema de terminal para ejecutar el código.Deberías ver la siguiente salida:
John Smith, Senior AssociateLas etiquetas de caso
100y200ahora están emparejadas con la sección switch que establece el título al valor de cadenaSenior Associate.
Resumen
Estas son las principales enseñanzas sobre la instrucción switch:
- Use la sentencia
switchcuando tengas un valor con muchas coincidencias posibles, donde cada coincidencia requiera una rama en la lógica de tu código. - Una sola sección switch que contiene lógica de código se puede emparejar con una o más etiquetas definidas por la palabra clave
case. - Use la palabra clave opcional
defaultpara crear una etiqueta y una sección switch que se usen cuando no coincida ninguna otra etiqueta de caso.