1
resposta

Resolução - 21 Avaliando a pontuação de um usuário

// Imagine que você está desenvolvendo um sistema de avaliação para um jogo educativo. Ao final de cada fase, o jogador acumula uma pontuação total, e o sistema precisa avaliar se ele:

// Foi aprovado, se a pontuação for igual ou maior que 70
// Precisa de reforço, se a pontuação estiver entre 50 e 69
// Foi reprovado, se a pontuação for menor que 50

// Sua tarefa é criar uma função chamada avaliarDesempenho, que receba dois parâmetros:

// a pontuação final do jogador
// uma função de callback que será usada para exibir uma mensagem personalizada com base no resultado da avaliação.

// Exemplo de entrada:
// avaliarDesempenho(82, gerarMensagem);

// Saída esperada:
// Pontuação: 82
// Parabéns! Você foi aprovado!

// realizei uma verificação do parâmetro referente ao status do jogador para evitar erros.
function gerarMensagem(desempenho){
    let status = ['aprovado', 'reforço', 'reprovado']; 
    if  (!status.includes(desempenho)){
        return 'Status inválido.'
    }
    if ( desempenho === 'aprovado'){
        return 'Parabéns! Você foi aprovado.';
    } else if (desempenho === 'reforço'){
        return 'Atenção! Você precisa de reforço.'
    } else {
        return 'Pontuação insuficiente! Você foi reprovado.'
    }
}

// aqui também realizei uma verificação para checar o typeof da pontuação.
function avaliarDesempenho(pontos, fnCallback ){
    if ( typeof pontos !== 'number' || pontos < 0 ){
        return 'Pontuação inválida.'
    }
    
    let desempenho = '';

    console.log(`Pontuação: ${pontos}`);

    if (pontos >= 70){
        desempenho = 'aprovado';
    } else if ( pontos >= 50){
        desempenho = 'reforço';
    } else {
        desempenho = 'reprovado';
    }

    let status = fnCallback(desempenho)
    return status
}

console.log(avaliarDesempenho(30, gerarMensagem))
1 resposta

Olá, Cauê! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de funções de callback para personalizar mensagens, utilizou muito bem a verificação de tipos para evitar erros e ainda compreendeu a importância das condicionais para classificar corretamente o desempenho do jogador.

Uma dica interessante para o futuro é deixar o código mais enxuto usando operador ternário e eliminando repetições. Assim:

function gerarMensagem(desempenho) {
    const mensagens = {
        aprovado: 'Parabéns! Você foi aprovado.',
        reforço: 'Atenção! Você precisa de reforço.',
        reprovado: 'Pontuação insuficiente! Você foi reprovado.'
    };
    return mensagens[desempenho] || 'Status inválido.';
}

function avaliarDesempenho(pontos, fnCallback) {
    if (typeof pontos !== 'number' || pontos < 0) return 'Pontuação inválida.';

    console.log(`Pontuação: ${pontos}`);
    const desempenho = pontos >= 70 ? 'aprovado' : pontos >= 50 ? 'reforço' : 'reprovado';
    return fnCallback(desempenho);
}

console.log(avaliarDesempenho(82, gerarMensagem));

Isso faz com que a lógica fique mais clara, reduzindo o número de if else e tornando o código mais fácil de manter.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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