Olá, José. Como vai?
O seu código em C# ficou excelente! Assim como no seu projeto do número secreto, você manteve o padrão de qualidade e usou a função ValidarDados() com int.TryParse e o parâmetro out. Isso blinda o seu sistema de controle de estoque contra falhas caso o usuário digite uma letra ou um caractere inválido nos menus. É uma prática de mercado excepcional!
A estrutura do laço while (opcao == 1) está bem desenhada para esse fluxo condicional e o console vai rodar perfeitamente.
Analisando a arquitetura do seu código, há uma oportunidade fantástica de melhoria focada na Experiência do Usuário (UX) e na limpeza de código, utilizando o laço do-while que você estudou neste capítulo.
No seu modelo atual com o while tradicional, você precisou duplicar as linhas de código que exibem o menu e leem a opção do usuário (uma vez antes do laço para permitir a entrada, e outra vez no final do laço para decidir se ele continua).
Como o menu de adicionar produtos precisa rodar pelo menos uma vez para o usuário decidir o que quer fazer, o do-while elimina essa repetição de código. Ele executa o bloco primeiro e faz a checagem da condição apenas no final.
Para te ajudar a visualizar como a lógica se torna mais direta e linear ao movermos a condição para o fim do bloco, observe a estrutura de execução do fluxo:
Veja como o seu código fica mais enxuto, elegante e sem nenhuma repetição utilizando essa reestruturação:
int quantidadeDeProdutos = 0;
int opcao;
do
{
Console.WriteLine("Deseja adicionar um produto ao estoque?");
Console.WriteLine("1 - Sim | 0 - Não");
opcao = ValidarDados();
if (opcao == 1)
{
Console.WriteLine("Quantidade:");
int quantidade = ValidarDados();
quantidadeDeProdutos += quantidade;
Console.WriteLine($"Estoque atual: {quantidadeDeProdutos}\n");
}
else if (opcao != 0)
{
Console.WriteLine("Opção inválida! Tente novamente.\n");
}
} while (opcao != 0); // O laço continua rodando enquanto o usuário não digitar 0 para sair
Console.WriteLine($"\nEstoque final total: {quantidadeDeProdutos}");
Console.WriteLine("Obrigado por usar nosso sistema de estoque!");
O que melhorou com essa refatoração?
- Fim do código duplicado: As perguntas do menu agora só existem em um único lugar dentro do programa.
- Tratamento de opções inválidas: Adicionamos um
else if (opcao != 0) bem simples. Se o usuário digitar um número aleatório (como 5), o sistema avisa que a opção é inválida e o laço repete o menu de forma inteligente, em vez de simplesmente fechar o programa.
Parabéns por aplicar consistentemente funções de validação nos seus exercícios e por demonstrar uma evolução nítida na linguagem C#!
Espero que possa ter lhe ajudado!