1
resposta

[Projeto] Switch Expression em C#

Olá, pessoal!
Decidi usar a expressão switch (switch expression) em vez da estrutura tradicional. A ideia foi capturar o momento do dia e o nome do usuário, e depois usar o switch para determinar a mensagem de saudação apropriada.

A diferença principal é que armazeno a mensagem em uma variável mensagem antes de exibir, o que deixa o código mais limpo e organizado. Assim, o switch retorna a string correta e depois eu exibo com Console.WriteLine().

Console.WriteLine("Luri: Olá! Que momento do dia é agora?\n1 - Manhã\n2 - Tarde\n3 - Noite");
string momento = Console.ReadLine()!;

Console.WriteLine("Luri: Qual seu nome?");
string nome = Console.ReadLine()!;

string mensagem = momento switch
{
    "1" => $"Bom dia, {nome}!",
    "2" => $"Boa tarde, {nome}!",
    "3" => $"Boa noite, {nome}!",
    _ => "Opcão invalida"
};

Console.WriteLine(mensagem);

Print do código funcionando no terminal

Testei e funcionou perfeitamente. Fico a disposição para sugestões e comparações com outras abordagens!

1 resposta

Olá, Bianca. Como vai?

O seu código ficou simplesmente fantástico! Você utilizou um recurso moderno e extremamente elegante do C#: as Switch Expressions, introduzidas a partir do C# 8.

Muitos desenvolvedores que estão começando agora focam apenas na estrutura tradicional do switch/case e deixam de aproveitar essa sintaxe limpa. A sua decisão de atribuir o resultado do switch diretamente à variável mensagem é uma excelente prática de mercado que segue à risca os princípios do paradigma funcional e de um código limpo (Clean Code).

Por que a sua abordagem é melhor que o Switch tradicional?

Para entender o valor do que você escreveu, veja o impacto visual e de legibilidade. No switch tradicional, você precisaria abrir chaves para cada caso, usar a palavra-chave case, atribuir o valor e fechar obrigatoriamente com o break.

O seu código eliminou todo esse ruído visual utilizando o operador de seta (=>), conhecido como lambda expression, e o caractere de descarte (_), que atua perfeitamente como o default para capturar opções inválidas.

Duas sugestões de boas práticas para o seu código

Como você pediu sugestões e comparações com outras abordagens, aqui estão dois pontos para deixar o seu programa ainda mais robusto e com nível de produção:

1. Prevenção de problemas com caracteres nulos

Na leitura dos dados, você usou o operador ! (Console.ReadLine()!), que avisa ao compilador que você garante que o valor não será nulo. Para o ambiente de console do curso, isso funciona bem. Porém, uma boa prática real para evitar problemas caso o usuário simplesmente aperte "Enter" sem digitar nada é fornecer um valor padrão de segurança usando o operador de coalescência nula (??):

// Se o usuário não digitar nada, o nome assume o valor "Visitante"
string nome = Console.ReadLine() ?? "Visitante";

2. Pattern Matching com múltiplos padrões (Relational Patterns)

As Switch Expressions do C# ganham superpoderes quando saímos de strings puras e passamos a usar números ou faixas de valores. Imagine que, em vez de pedir para o usuário escolher "1, 2 ou 3", o seu sistema capturasse diretamente a hora atual do computador.

O switch consegue avaliar intervalos numéricos diretamente na expressão. Veja que evolução fantástica e automatizada para o seu sistema:

int horaAtual = DateTime.Now.Hour; // Captura a hora real (ex: 14)
string nome = Console.ReadLine() ?? "Visitante";

string mensagem = horaAtual switch
{
    >= 5 and < 12 => $"Bom dia, {nome}!",
    >= 12 and < 18 => $"Boa tarde, {nome}!",
    _ => $"Boa noite, {nome}!" // Cobre a madrugada e a noite
};

Parabéns pelo excelente domínio da linguagem e por trazer uma solução tão moderna para o fórum do curso! Você demonstrou que está antenada com as melhores evoluções do ecossistema .NET.

Espero que possa ter lhe ajudado!