Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Minha resolução para o exercício: sistema de sorteio com avaliação de participantes

let participantes = [
  { nome: "Diego", pontuacao: 95 },
  { nome: "Bruna", pontuacao: 90 },
  { nome: "Pedro", pontuacao: 80 },
  { nome: "Laura", pontuacao: 75 },
  { nome: "Bruno", pontuacao: 60 },
  { nome: "Luiza", pontuacao: 45 },
  { nome: "Jorge", pontuacao: 30 },
];

function sorteioDoNome(listaParticipantes) {
  console.log("Sorteando...");
  let sorteioParticipantes = Math.floor(
    Math.random() * listaParticipantes.length,
  );
  return listaParticipantes[sorteioParticipantes];
}

function exibirNomeParticipante(nomeSorteado) {
  setTimeout(() => {
    console.log("Participante sorteado:", nomeSorteado);
    console.log("Pontuação:", nomeSorteado.pontuacao);
    console.log(avaliarPontuacao(nomeSorteado.pontuacao));
  }, 2000);
}

function avaliarPontuacao(pontuacao) {
  if (pontuacao > 80) {
    return "Parabéns, você foi premiado(a).";
  } else if (pontuacao >= 50) {
    return "Você quase conseguiu! Fique de olho nos próximos sorteios.";
  } else {
    return "Infelizmente, não foi dessa vez.";
  }
}

function sorteioCompleto(lista) {
  let sorteado = sorteioDoNome(lista);
  exibirNomeParticipante(sorteado);
}

sorteioCompleto(participantes);
2 respostas
solução!

Olá, Diego. Como vai?

Sua resolução ficou excelente! Você estruturou o código de forma modular, o que é uma das melhores práticas no desenvolvimento de software. Ao dividir as responsabilidades em funções menores como sorteioDoNome, exibirNomeParticipante e avaliarPontuacao, o seu código se torna muito mais fácil de ler e de manter.

O uso do setTimeout para simular o tempo de espera do sorteio foi um toque de mestre, pois aproxima a lógica de uma experiência de usuário (UX) real, criando aquele "clima de suspense" comum em sorteios.

Para agregar ainda mais valor ao seu aprendizado, gostaria de sugerir alguns pontos de melhoria e boas práticas em JavaScript:

  • Tratamento de listas vazias: Em um sistema real, é importante verificar se a lista de participantes não está vazia antes de tentar o sorteio. Caso listaParticipantes.length seja 0, o código poderia retornar um erro ou uma mensagem amigável.
  • Uso de Template Strings: Notei que você usou vírgulas no console.log. Uma forma muito comum no JavaScript moderno é utilizar as crases (Template Strings), que permitem interpolar variáveis de forma mais fluida.
  • Organização dos Logs: No exibirNomeParticipante, você está acessando nomeSorteado que, na verdade, é o objeto completo do participante. Renomear o parâmetro para participanteSorteado deixaria o código ainda mais semântico.

Veja como ficaria uma versão levemente refatorada com essas sugestões:

function exibirNomeParticipante(participante) {
  setTimeout(() => {
    console.log(`Participante sorteado: ${participante.nome}`);
    console.log(`Pontuação: ${participante.pontuacao}`);
    console.log(avaliarPontuacao(participante.pontuacao));
  }, 2000);
}

Além disso, uma curiosidade técnica: o Math.random() gera um número decimal entre 0 e 1. Ao multiplicar pelo length e usar o Math.floor(), você garante que o índice sorteado esteja sempre dentro do intervalo correto do array (de 0 até o total de itens menos um). É a técnica padrão e mais eficiente para sorteios em arrays!

Espero que possa ter lhe ajudado!

Olá, Evandro. Espero que esteja bem!

Muito obrigado pela excelente explicação e, principalmente, pelas sugestões de melhorias e boas práticas.

Agradeço, também, por mostrar como ficaria uma nova versão do código com as sugestões comentadas; fiz questão de implementá-las no meu código principal.

Tenha um excelente dia!