1
resposta

[Dúvida] Sobre o último tópico do projeto Desafio (Maior idade) - Aula 01

Olá, boa noite! Tudo bem?

Eu tentei fazer um pouco diferente do que foi pedido, tentei fazer alguns loops para garantir que o usuário estaria, de fato inserindo alguma informação válida, além de algumas mensagens personalizadas, como: O tempo faltante para tirar a carteira de motorista e mensagens de erro. Gostaria de um feedback do código. E saber como melhorariam ele.

CÓDIGO:

// PÁGINA DE DESAFIOS
// Autor: Allan Gomes
// Programa: Comparador de Maior Idade;
// Liguagem de Programação: JavaScript;

// DEFINIÇÃO DE VARIÁVEIS
let mensagemDeErro = "Erro! Preencha todos os campos devidamente.";
let nome;
let idade;
let rep = true;

// DEFINIÇÃO DE FUNÇÕES
function naoPreenchido(mensagem) {
    a = prompt(mensagem);
    while (!a || a.trim() === "") {
        console.log(a);
        alert(mensagemDeErro);
        a = prompt("Tente novamente.\n" + mensagem);
    }
    return a
}

function compararIdade(name, age) {
    const c = 18;
    if (age >= c) {
        alert("Parabéns, " + name + "! Você pode retirar a sua carteira de motorista com sucesso.");
        rep = false;
        return false
    }
    else if (age < c) {
        var d = c - age;
        if (d == 1) {
            alert("Sinto muito, " + name + "! Você não possui idade suficiente para retirar a sua carteira de motorista.\nTente novamente daqui a " + d + " ano.");
        }
        else {
            alert("Sinto muito, " + name + "! Você não possui idade suficiente para retirar a sua carteira de motorista.\nTente novamente daqui a " + d + " anos.");
        }
        rep = false;
        return false
    }
    else {
        alert("Olá, " + name + ".\nVocê não inseriu as informações corretamente.");
        rep = true;
    }
}

// PROGRAMA
alert("Boas vindas ao nosso site!");
nome = naoPreenchido("Qual o sua nome?");
while (rep == true) {
    idade = parseInt(naoPreenchido("Qual a sua idade?"));
    compararIdade(nome, idade);
}
1 resposta

O código está bem estruturado, mas há alguns pontos a serem corrigidos ou melhorados:

Erros e Melhorias Variáveis não declaradas corretamente dentro da função naoPreenchido

Na linha a = prompt(mensagem);, a variável a não foi declarada corretamente com let ou var, tornando-a uma variável global de forma não intencional. Solução: Declare a com let para evitar problemas de escopo. Uso de variável global rep dentro da função compararIdade

O código altera rep dentro da função sem declará-la explicitamente, o que pode causar efeitos colaterais inesperados. Solução: Retorne false ou true na função e atribua o valor de rep corretamente no loop. Condição else desnecessária na função compararIdade

Como já verificamos se a idade é maior ou menor que 18, a última condição pode ser um simples else, sem necessidade da comparação redundante. Possível erro de entrada na conversão de idade

parseInt pode retornar NaN se o usuário digitar algo inválido. O código não trata isso, o que pode gerar um loop infinito. Solução: Verifique se idade é um número válido antes de chamar compararIdade.