Olá, José. Como vai?
Parabéns pelo código! Você aplicou conceitos de C# muito modernos e demonstrou uma excelente preocupação com a experiência do usuário ao criar funções de validação.
Gostaria de destacar alguns pontos extremamente positivos na sua implementação:
- Switch Expression: O uso do
switch expression (introduzido nas versões mais recentes do C#) deixa o código muito mais limpo e conciso do que o switch tradicional com case e break. - TryParse: Utilizar o
double.TryParse é a melhor prática para evitar que o programa pare de funcionar (crash) caso o usuário digite um caractere inválido. - Modularização: Ao criar os métodos
ValidarInformacao e ValidarOperacao, você aplicou o princípio DRY (Don't Repeat Yourself), o que torna o código fácil de manter.
Para complementar seu aprendizado, deixo uma pequena sugestão de segurança técnica:
No seu switch expression, o compilador do C# pode emitir um aviso dizendo que ele não é exaustivo. Isso acontece porque, embora você tenha validado o char antes, o switch tecnicamente precisa saber o que fazer se um caractere diferente chegar lá. Você pode adicionar um discard pattern (_) ao final para tratar qualquer eventualidade:
double resultado = tipoDaOperacao switch
{
'+' => primeiroNumero + segundoNumero,
'-' => primeiroNumero - segundoNumero,
'*' => primeiroNumero * segundoNumero,
'/' => primeiroNumero / segundoNumero,
_ => 0 // Valor padrão caso caia em uma operação não mapeada
};
Outro ponto legal: você tratou a divisão por zero com um if logo antes do cálculo. Isso é ótimo! Em aplicações mais robustas, você também poderia tratar isso dentro da própria lógica do switch.
Continue com esse excelente nível de entrega e atenção aos detalhes!
Espero que possa ter lhe ajudado!