Falta pouco!

0 dias

0 horas

0 min

0 seg

1
resposta

Organizando o código

Olá, pessoal!

Eu optei por organizar o código antes de seguir as aulas. Dessa forma ele fica mais fácil de ler, usar e a refatoração serve como prática dos conceitos já aprendidos até aqui! O que fiz:

  1. Separei a lógica de seleção de banda na função "EscolherBanda()";
  2. Separei a lógica de pedir qualquer tecla antes de continuar na função "AguardarQualquerTecla()";
  3. Coloquei o "Console.Clear()" antes de cada chamada à função "ExibirTituloDaOpcao()" dentro da função, removendo todas as demais chamadas; e
  4. Coloquei o "Console.Clear()" antes de cada chamada à "ExibirOpcoesDoMenu()" dentro da própria, removendo as duplicatas.

Depois aproveitei para refatorar a "EscolherBanda()" para listar todas as bandas e pedir pro usuário selecionar uma usando um número. Essas funções ficaram assim:

Banda? EscolherBanda()
{
    if (bandasRegistradas.Count == 0)
    {
        Console.WriteLine("Não há nenhuma banda registrada ainda.");
        return null;
    }
    else if (bandasRegistradas.Count == 1)
    {
        var banda = bandasRegistradas[bandasRegistradas.Keys.First()];
        Console.WriteLine($"Selecionada a banda {banda.Nome}");
        return banda;
    }

    Console.WriteLine("Bandas registradas:");
    var bandasRegistradasKeys = bandasRegistradas.Keys.ToList();
    for (int i = 0; i < bandasRegistradasKeys.Count; i++)
    {
        var key = bandasRegistradasKeys[i];
        Console.WriteLine($"\t {i+1}) {key}");
    }
    Console.Write($"\nEscolha uma banda (1-{bandasRegistradasKeys.Count}): ");
    int bandaEscolhida = int.Parse(Console.ReadLine()!) - 1;
    if (bandaEscolhida < 0 || bandaEscolhida >= bandasRegistradasKeys.Count)
    {
        Console.WriteLine("Opção inválida.");
        return null;
    }
    return bandasRegistradas[bandasRegistradasKeys[bandaEscolhida]];
}

void AguardarQualquerTecla()
{
    Console.WriteLine("\nDigite uma tecla para voltar ao menu principal...");
    Console.ReadKey();
}

E um exemplo de uso delas:

void AvaliarUmaBanda()
{
    ExibirTituloDaOpcao("Avaliar banda");
    var banda = EscolherBanda();
    if (banda is not null)
    {
        Console.Write($"Qual a nota que a banda {banda.Nome} merece: ");
        int nota = int.Parse(Console.ReadLine()!);
        banda.AdicionarNota(nota);
        Console.WriteLine($"\nA nota {nota} foi registrada com sucesso para a banda {banda.Nome}");
    }
    AguardarQualquerTecla();
    ExibirOpcoesDoMenu();

}
1 resposta

Oi, Daniel! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

É muito interessante ver como você organizou o código e separou funções para tornar a leitura e manutenção mais fáceis. A forma como você refatorou EscolherBanda() e AguardarQualquerTecla() mostra cuidado em aplicar os conceitos de Orientação a Objetos e boas práticas de programação, deixando o fluxo do menu mais limpo e compreensível.

Uma dica interessante para o futuro é utilizar o método TryParse para evitar que o programa quebre caso o usuário digite algo que não seja um número. Por exemplo:


Console.Write("Escolha um numero: ");
int numero;
if(int.TryParse(Console.ReadLine(), out numero)) {
    Console.WriteLine("Voce escolheu: " + numero);
} else {
    Console.WriteLine("Entrada invalida, tente novamente");
}

Esse código verifica se a entrada é um número válido e ajuda a prevenir erros de execução.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!