A Wikipédia descreve uma instrução switch como "um tipo de mecanismo de controlo de seleção que permite que o valor de uma variável ou de uma expressão altere o fluxo de controlo do programa".
O mecanismo envolve as seguintes palavras-chave: switch, case, break e default.
Na sua forma mais simples, testam uma expressão primitiva ou uma string e tomam uma decisão com base no seu valor. Por exemplo:
string direction = GetDirection();
switch (direction)
{
case "left":
GoLeft();
break;
case "right":
GoRight();
break;
default:
MarkTime();
break;
}
Na sua forma mais sofisticada, introduzem a conversão de tipos descendente case <Type> <variable>: e as guardas (when).
Animal animal = GetAnimal();
switch (animal)
{
case Dog canine:
case Coyote canine:
canine.Bark();
break;
case Cat cat when cat.HasOnly8Lives():
cat.IsCareful();
cat.Meow();
break;
case Cat cat:
cat.Meow();
break;
}
Estás a desenvolver um sistema para ajudar o pessoal do sítio web de um clube de futebol a fazer relatos dos jogos. Este sistema é capaz de analisar vários aspetos do jogo, dentro e fora do campo, e converte-os num fluxo de eventos.
A equipa joga sempre em 4-3-3 e nunca concordou com a alteração às regras de 1965 que permite substituições, quanto mais plantéis alargados.
As descrições dos jogadores são as seguintes:
1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"
Implementa o método estático PlayAnalyzer.AnalyzeOnField() para produzir a descrição de um jogador com base no número da camisola.
PlayAnalyzer.AnalyzeOnField(10);
// => "striker"
Altera o método PlayAnalyzer.AnalyzeOnField() para devolver UNKNOWN quando é processado um número de camisola fora do intervalo 1-11.
Implementa o método PlayAnalyzer.AnalyzeOffField() para produzir descrições de atividades e de personagens à volta do campo de jogo.
Este método recebe diferentes tipos de dados que devem ser analisados e convertidos em texto adequado para ajudar os jornalistas.
Para começar, vamos abordar os dados sobre o estádio:
int)string)Os tipos de dados desconhecidos não devem ser processados, por isso, se o método receber dados de um tipo diferente, deve ser devolvida uma string vazia.
PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."
PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"
PlayAnalyzer.AnalyzeOffField(0.5);
// => ""
Altera o método PlayAnalyzer.AnalyzeOffField() para produzir descrições dos incidentes que acontecem durante o jogo.
Os incidentes podem ser qualquer subclasse do tipo Incident e contêm uma descrição do incidente.
As lesões são um tipo especial de incidente, porque obrigam a interromper o jogo, por isso devem ser tratadas de forma diferente.
PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."
PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."
Altera o método PlayAnalyzer.AnalyzeOffField() para mencionar os treinadores dos clubes presentes durante o jogo.
Os treinadores são instâncias do tipo Manager e têm um nome e o nome do clube que treinam.
O clube do treinador pode ser desconhecido, caso em que será definido como null.
Se o clube de um treinador não for conhecido, não deve fazer parte da descrição.
PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"
PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"
Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.