Exercício - Implementar uma instrução switch
- 11 minutos
Uma instrução switch é uma instrução de seleção C# que fornece uma alternativa a um constructo de ramificação if-elseif-else. A instrução switch fornece vantagens sobre um constructo if-elseif-else ao avaliar um único valor em relação a uma lista de valores correspondentes conhecidos.
Considere o seguinte cenário:
- Você está trabalhando em um aplicativo relacionado à nutrição alimentar. Uma seção do código lida com frutas.
- Seu código inclui uma variável nomeada
fruitque é usada para conter o nome de diferentes tipos de frutas. - Você tem uma lista das 20 frutas nas quais seu aplicativo está focado.
- Você deseja ramificar seu código com base no valor atribuído a
fruit.
Nesse cenário, você pode usar uma switch instrução para criar uma ramificação separada para cada tipo de fruta.
Como funciona uma instrução alternar?
A instrução switch escolhe uma seção de código a ser executada em uma lista de seções de comutador possíveis. A seção de comutador selecionada é escolhida com base em uma correspondência de padrão com a expressão de correspondência da instrução.
Considere o exemplo de código a seguir que mostra a estrutura básica da switch instrução:
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;
}
A expressão de correspondência (que também talvez seja chamada de expressão de comutador) é o valor após a palavra-chave switch, nesse caso(fruit). Cada seção de comutador é definida por um padrão de caso. Os padrões de caso são construídos usando a palavra-chave case seguida por um valor. O primeiro padrão de caso neste exemplo é: case "apple":. Os padrões de caso são expressões booleanas que são avaliadas para resultar em true ou false. Cada seção de comutador inclui um pequeno número de linhas de código que serão executadas se o padrão de caso for uma correspondência para a expressão de correspondência. Neste exemplo, se fruit for atribuído um valor de "apple", o primeiro padrão de caso será considerado como true e essa seção de troca será executada.
Uma instrução alternar deve incluir pelo menos uma seção de comutador, mas normalmente conterá três ou mais seções de comutador.
A opção é mais usada quando:
- Você tem um único valor (variável ou expressão) que deseja corresponder a muitos valores possíveis.
- Para uma determinada correspondência, você precisa executar no máximo algumas linhas de código.
Observação
Este primeiro exemplo de uma switch declaração é propositalmente simples e seu exame da sintaxe foi breve. Você examinará recursos adicionais da instrução switch ao trabalhar em alguns cenários mais avançados nas seções abaixo.
É hora de preparar seu ambiente de codificação e começar a desenvolver as próprias instruções switch.
Preparar o ambiente de codificação
Este módulo inclui atividades práticas que orientam você durante o processo de criação e execução do código de demonstração. Recomendamos que você conclua essas atividades usando o Visual Studio Code como seu ambiente de desenvolvimento. Usar o Visual Studio Code nessas atividades ajudará você a se sentir mais confortável escrevendo e executando o código em um ambiente de desenvolvedor usado por profissionais em todo o mundo.
Abra o Visual Studio Code.
Você pode usar o menu Iniciar do Windows (ou recurso equivalente em outro sistema operacional) para abrir o Visual Studio Code.
No menu Arquivo do Visual Studio Code, selecione Abrir Pasta.
Na caixa de diálogo Abrir Pasta , navegue até a pasta Área de Trabalho do Windows.
Caso você tenha um local de pasta diferente onde mantém os projetos de código, você pode usar esse local de pasta. Neste treinamento, o importante é ter um local fácil de localizar e lembrar.
Na caixa de diálogo Abrir Pasta, selecione Selecionar Pasta.
Se você vir uma caixa de diálogo de segurança perguntando se confia nos autores, selecione Sim.
No menu Terminal do Visual Studio Code, selecione Novo Terminal.
Observe que o prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:
C:\Users\someuser\Desktop>Observação
Se você estiver trabalhando no próprio computador em vez de em uma área restrita ou em um ambiente hospedado e tiver concluído outros módulos do Microsoft Learn desta série C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Se esse for o caso, você poderá ignorar a próxima etapa, que será usada para criar o aplicativo de console na pasta TestProject.
No prompt de comando terminal, para criar um novo aplicativo de console em uma pasta especificada, insira o seguinte prompt:
dotnet new console -o ./CsharpProjects/TestProjectEste comando da CLI do .NET usa um modelo de programa .NET para criar o novo projeto de aplicativo de console C# no local da pasta especificada. O comando cria as pastas CsharpProjects e TestProject para você e usa TestProject como o nome do arquivo
.csproj.Se uma mensagem for exibida informando que os arquivos já existem, continue com as próximas etapas. Você reutilizará os arquivos de projeto existentes.
No modo de exibição EXPLORER, expanda a pasta CsharpProjects .
Você deverá ver a pasta TestProject e dois arquivos, um arquivo de programa C# chamado Program.cs e um arquivo de projeto em C# chamado TestProject.csproj.
No menu Arquivo do Visual Studio Code, selecione Abrir Pasta.
Na caixa de diálogo Abrir Pasta , selecione a pasta CsharpProjects e selecione Selecionar Pasta.
No modo de exibição EXPLORER, expanda a pasta TestProject e selecione Program.cs.
Exclua as linhas de código existentes.
Você usará esse projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.
Feche o painel do terminal.
Criar e testar uma declaração switch
Verifique se o Visual Studio Code está aberto e se o arquivo Program.cs está sendo exibido no painel do Editor.
Observação
O arquivo Program.cs deve estar vazio. Se não estiver, selecione e exclua todas as linhas de código.
Digite o seguinte código no Editor do Visual Studio Code:
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}");No menu Arquivo do Visual Studio Code, selecione Salvar.
O arquivo Program.cs deve ser salvo antes de criar ou executar o código.
No painel EXPLORER, para abrir um Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.
Um painel Terminal será aberto. O Terminal deve incluir um prompt de comando mostrando que ele já está aberto no local da pasta TestProject.
No prompt de comando do terminal, para executar seu código, digite dotnet run e pressione Enter.
Observação
Se você vir uma mensagem dizendo "Não foi possível localizar um projeto a ser executado", verifique se o prompt de comando do Terminal exibe o local esperado da pasta TestProject. Por exemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>A seguinte saída deve ser exibida:
John Smith, Senior AssociateReserve um minuto para examinar a
switchdeclaração que você inseriu.Observe que a instrução
switchdefine um único bloco de código.A
switchinstrução define um único bloco de código que inclui uma lista de seções de comutador. À direita da palavra-chaveswitchestá uma expressão alternar entre parênteses.Observe a lista de seções de comutador dentro do bloco de código.
O
switchbloco de código contém uma lista de seções de comutador, cada uma das quais inclui um ou mais rótulos de comutador. Além disso, cada seção de comutador inclui uma lista de instruções que será executada se o rótulo for igual à expressão de comutador definida na parte superior da instrução alternar.A expressão de comutador é avaliada em relação aos rótulos de maiúsculas e minúsculas até que um valor igual à expressão de comutador seja encontrado. Se nenhum dos rótulos corresponder, a lista de instruções do caso
defaultserá executada. Se nenhum padrão for incluído, o controle será transferido para o ponto final da instrução alternar. Cada rótulo deve fornecer um tipo de valor que corresponda ao tipo especificado na expressão de comutador.Observação
O rótulo opcional
defaultpode aparecer em qualquer posição na lista de seções de comutador. No entanto, a maioria dos desenvolvedores opta por colocá-lo por último porque faz mais sentido (logicamente) posicionardefaultcomo a opção final. Independentemente da posição, adefaultseção será avaliada por último.Em nosso exemplo:
- a expressão switch é
(employeeLevel) - cada seção de comutador tem um rótulo de comutador único (
caseoudefault). - a seção de opção correspondente é definida por
case: 200, uma vez queemployeeLevel = 200.
- a expressão switch é
Observe que cada seção do interruptor está separada da próxima.
Somente uma seção de comutador tem permissão para ser executada. Isso significa que a execução de uma seção alternar não pode “cair” na próxima seção alternar. A palavra-chave
breaké uma das várias maneiras de encerrar uma seção de comutador antes de chegar à próxima seção. Se você esquecer a palavra-chavebreak(ou, opcionalmente, a palavra-chavereturn), o compilador gerará um erro.
Alterar o valor da variável de nível para ver como a instrução switch a avalia
Para exercer o caso padrão, vamos alterar o nível do funcionário modificando a atribuição de valor.
Para modificar o valor atribuído
employeeLevel, atualize o código da seguinte maneira:int employeeLevel = 201;Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Observe que a saída foi alterada.
Agora, ao executar o código, você deverá ver o título mais genérico usado.
John Smith, AssociateComo a
employeeLevelnão corresponde a nenhum rótulo, o rótulodefaulté utilizado.
Modificar uma seção de interruptor para incluir várias etiquetas
Suponha que nossa empresa decidiu dar a todos os funcionários de nível 100 o título "Associado Sênior" - o mesmo título que funcionários de nível 200. Como desenvolvedor, você decide implementar isso removendo a primeira seção de comutador que pertence ao rótulo case 100: e, em vez disso, permitindo que os rótulos case 100: e case 200: executem a mesma seção de comutador.
Para modificar o valor atribuído
employeeLevel, atualize o código da seguinte maneira:int employeeLevel = 100;Para atribuir vários rótulos à seção do primeiro interruptor, atualize seu código da seguinte maneira:
case 100: case 200: title = "Senior Associate"; break;Quando terminar de fazer alterações, as modificações deverão corresponder ao seguinte código:
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}");Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.A seguinte saída deve ser exibida:
John Smith, Senior AssociateOs dois rótulos de caso
100e200agora são emparelhados com a seção de opção que define o cargo como o valor de cadeia de caracteresSenior Associate.
Recapitulação
Veja as principais novidades que você aprendeu sobre a instrução alternar:
- Use a instrução
switchquando você tiver um valor com muitas correspondências possíveis, cada correspondência que exija uma ramificação em sua lógica de código. - Uma única seção de opção que contém a lógica de código que pode ser correspondida usando um ou mais rótulos definidos pela palavra-chave
case. - Use a palavra-chave opcional
defaultpara criar um rótulo e uma seção de opção que serão usados quando nenhum outro rótulo de caso corresponder.
Verificação de conhecimento
Comentários
Esta página foi útil?
No
Precisa de ajuda com este tópico?
Quer experimentar o Pergunte e Aprenda para esclarecer ou guiar você neste tópico?