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

[Dúvida] - Função "gerarNumeroAleatorio"

Olá, pessoal.

Alguém poderia me explicar o funcionamento da função "gerarNumeroAleatorio" e os códigos anexos a ela depois desta aula? Porque sinceramente eu não entendi nada...

2 respostas
solução!

Olá!

É normal que, ao ver tantos comandos novos como includes, push, length e o conceito de recursão, a cabeça dê um nó no começo.

Vou explicar de um jeito bem simples o que esse código está fazendo, para que você consiga visualizar o processo de sorteio sem repetições.

O que está acontecendo no código?

Imagine que você tem um pote de sorteio (a nossa lista). Cada vez que um número sai, você o anota em um papel e guarda dentro desse pote. O objetivo é garantir que, se um número já saiu, ele não seja usado de novo até que o pote esteja cheio.

1. Criando o "Pote" (a lista)

No começo do código, definimos let listaDeNumerosSorteados = [];. Esses colchetes vazios indicam que nosso pote começa sem nada.

2. A função de gerar o número

Dentro da função gerarNumeroAleatorio(), acontecem três passos importantes:

  • Verificação de pote cheio: Antes de sortear, o código olha para o tamanho da lista (.length). Se o limite for 10 e já tivermos 10 números, limpamos a lista para recomeçar.
  • O sorteio: O Math.random() escolhe um número.
  • A verificação (includes): Aqui perguntamos: "Esse número já está na lista?".
    • Se sim: Usamos a recursão. A função chama ela mesma para tentar um novo número. É como se você pegasse um papel repetido no sorteio, jogasse de volta e sorteasse outro imediatamente.
    • Se não: O número é novo! Então usamos o .push() para guardá-lo na lista e o enviamos para o jogo.

Resumo dos comandos principais:

ComandoO que ele faz?Exemplo no mundo real
[]Cria uma lista vazia.Um pote vazio.
.includes(valor)Checa se o valor já está na lista.Perguntar: "Esse nome já saiu?".
.push(valor)Coloca o valor no final da lista.Colocar o papelzinho usado no pote.
.lengthDiz o tamanho atual da lista.Contar quantos papéis tem no pote.

Um ponto de atenção: A recursão:

Como o Guilherme mencionou, a função chamar a si mesma (return gerarNumeroAleatorio()) é muito útil aqui porque temos poucos números (apenas 10). Se tivéssemos milhões de números e quase todos já sorteados, o computador poderia ficar "cansado" de tentar achar o único que falta, causando um erro. Mas para o nosso jogo, funciona perfeitamente!

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

Perfeito, Lorena! Entendi perfeitamente. Na verdade eu nem entendi porque eu não entendi ontem, haha!

Muito obrigado!