Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Resolução Calculando a Idade

Tentei adicionar interatividade e levar em conta o aniversário do usuário. O código funciona, mas está de acordo com as boas práticas?

Console.WriteLine(@"
█▀▀ ▄▀█ █░░ █▀▀ █░█ █░░ ▄▀█ █▀▄ █▀█ █▀█ ▄▀█   █▀▄ █▀▀   █ █▀▄ ▄▀█ █▀▄ █▀▀
█▄▄ █▀█ █▄▄ █▄▄ █▄█ █▄▄ █▀█ █▄▀ █▄█ █▀▄ █▀█   █▄▀ ██▄   █ █▄▀ █▀█ █▄▀ ██▄");

int anoAtual = DateTime.Now.Year;

do
{
    Console.Write("\nDigite seu ano de nascimento: ");
    if (int.TryParse(Console.ReadLine(), out int anoNascimento))
    {
        do
        {
            Console.WriteLine("\nVocê já fez aniversário esse ano?");
            Console.WriteLine("\n1- Sim\n2- Não");
            string aniversario = Console.ReadLine()!;
            int idadeAtual = anoAtual - anoNascimento;
            switch (aniversario)
            {
                case "1":
                    Console.WriteLine($"\nSua idade atual é: {idadeAtual}");
                    break;
                case "2":
                    Console.WriteLine($"\nSua idade atual é: {idadeAtual-1}");
                    break;
                default:
                    Console.WriteLine("Erro. Por favor responda com 1 ou 2.");
                    continue;
            }
            break;
        }
        while (true);
        break;
    }
    else
    {
        Console.WriteLine("\nErro. Por favor digite seu ano de nascimento apenas com números.");
    }
}
while (true);
1 resposta
solução!

Olá Willian! Tudo bem?

Seu código está bem estruturado e funcional, mas há algumas sugestões que podem ajudar a deixá-lo mais alinhado com as boas práticas de programação e a torná-lo mais robusto:

  1. Validação de Entrada: Você já está utilizando int.TryParse, o que é ótimo para evitar exceções ao converter a entrada do usuário. Isso é uma boa prática!

  2. Uso de Loop: Você está utilizando do-while para garantir que o usuário insira os dados corretamente. Isso é uma boa abordagem para garantir que o programa continue pedindo a entrada até que um valor válido seja fornecido.

  3. Mensagens ao Usuário: As mensagens de erro e instruções para o usuário estão claras, o que é importante para uma boa experiência do usuário.

  4. Estrutura do Código: O uso de switch para verificar a resposta do usuário sobre o aniversário é uma escolha apropriada. No entanto, você pode considerar encapsular essa lógica em métodos separados para melhorar a legibilidade e a manutenção do código. Por exemplo, um método para obter o ano de nascimento e outro para calcular a idade.

  5. Considerações sobre o Ano Atual: Você está utilizando DateTime.Now.Year para obter o ano atual, o que é correto. Apenas certifique-se de que o fuso horário do sistema onde o código está sendo executado está correto, pois isso pode afetar o resultado.

  6. Melhorias de Código: Considere adicionar comentários ao seu código para explicar partes específicas, especialmente se você planeja revisitar o código no futuro ou compartilhá-lo com outros.

Aqui está um exemplo de como você poderia refatorar parte do seu código em métodos:

static int ObterAnoNascimento()
{
    while (true)
    {
        Console.Write("\nDigite seu ano de nascimento: ");
        if (int.TryParse(Console.ReadLine(), out int anoNascimento))
        {
            return anoNascimento;
        }
        else
        {
            Console.WriteLine("\nErro. Por favor digite seu ano de nascimento apenas com números.");
        }
    }
}

static bool JaFezAniversario()
{
    while (true)
    {
        Console.WriteLine("\nVocê já fez aniversário esse ano?");
        Console.WriteLine("\n1- Sim\n2- Não");
        string aniversario = Console.ReadLine()!;
        switch (aniversario)
        {
            case "1":
                return true;
            case "2":
                return false;
            default:
                Console.WriteLine("Erro. Por favor responda com 1 ou 2.");
                break;
        }
    }
}

int anoAtual = DateTime.Now.Year;
int anoNascimento = ObterAnoNascimento();
int idadeAtual = anoAtual - anoNascimento;

if (!JaFezAniversario())
{
    idadeAtual--;
}

Console.WriteLine($"\nSua idade atual é: {idadeAtual}");

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.