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...
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...
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.
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.
No começo do código, definimos let listaDeNumerosSorteados = [];. Esses colchetes vazios indicam que nosso pote começa sem nada.
Dentro da função gerarNumeroAleatorio(), acontecem três passos importantes:
.length). Se o limite for 10 e já tivermos 10 números, limpamos a lista para recomeçar.Math.random() escolhe um número.includes): Aqui perguntamos: "Esse número já está na lista?"..push() para guardá-lo na lista e o enviamos para o jogo.| Comando | O 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. |
.length | Diz 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!
Perfeito, Lorena! Entendi perfeitamente. Na verdade eu nem entendi porque eu não entendi ontem, haha!
Muito obrigado!