Video Transcript
Nesta aula nós vamos falar mais sobre a função geradora, vamos criar um contador infinito
para a gente contar.
Vamos fazer uma função geradora que nunca vai parar de ser percorrida porque vai ter
um loop dentro.
Tá bom?
Então deixa eu lembrar aqui o console do Firefox.
Vamos definir a função geradora de novo.
Como é que é?
Já pegou a manha, fala function, seguida do que?
Asterisco.
Vou chamar esse cara de contador assim.
Contador, se quiser para adicionar o valor inicial aqui do contador, mas eu não me
importo, você já sabe que a gente pode adicionar a parâmetro a função geradores também.
Então a gente vai fazer o seguinte, a gente vai ter um contador que começa do zero e
para cada chamada do next a gente vai obter o próximo valor do contador.
Deixa eu chamar a variável aqui, chamada quantia, vou iniciar com o valor zero.
Eu devo botar lete aqui.
Ah, deixa eu ver.
É lete porque eu quero mudar o valor.
Vou usar lete porque eu quero mudar a quantia para um, para dois, para três, assim por
diante.
Então o que a gente vai fazer?
A gente vai adicionar o loop aqui com o while.
Olhe o detalhe aqui, a gente vai usar o true para o loop ser infinito.
Normalmente o loops infinitos não são coisas de boa prática, não é?
Mas nesse caso aqui vai estar tudo bem porque a gente está usando a função geradora.
Essa função é sempre interrompida, pausada, dá uma pausa e você continua quando você
quiser na chamada do next.
Então essa função vai ficar realmente a função infinita.
Você pausa, continua, pausa, continua para sempre.
Então o contador vai até dar o overflow do valor da variável.
Então aqui a gente nesse loop para cada interação do loop você vai dar o yield da quantia mais
um, certo?
Você pode fazer quantia mais, mais, dessa maneira aqui.
Se você não sabe o que é mais, mais, só fazer essa maneira aqui.
Você faz, você dá o yield quantia, aí fala quantia, quantia mais um, certo?
Então é uma coisa.
Ele vai dar o valor, quantia, inicialmente vai ser zero, aí vai incrementar, vai virar
um, aí quando der a próxima interação vai ser um, aí vai aumentar, vai ser dois, se
torna dois e se impede antes, entendeu?
Então eu vou botar só mais ou mais para ficar mais breve aqui.
Porque o mais e mais funciona a seguinte maneira quando está no lado direito, no nome da variável,
ele vai usar o valor da variável que é zero, aí vai mandar para o yield.
Depois disso, certo?
Ele vai incrementar para um.
O valor do yield vai ser zero, não vai ser um.
Não vai ser depois desse cara pegar.
Está certo?
Então vamos ver, o que que dá?
Vou chamar contador, quando a gente chama a função geradora a gente obtém aquele objeto
generator, objeto gerador.
Vou chamar aqui let.
Acho que eu já tenho definido.
Eu já tenho definido.
Então precisa de let.
Então eu chamei o contador.
O contador nos deu o generator, object generator, vamos chamar next.
Vamos ver no que dá.
Então next nos retorna um objeto, tem a propriedade value com o valor zero, porque ele vai que
começa do começo da função.
Olha aqui.
Ele seta o quantia para zero.
Variável quantia tem valor zero.
Vai no loop, entrou no loop infinito, que o true vai dar infinito aqui.
Aí vai dar o primeiro yield, pegou o primeiro yield, pega o valor quantia que é zero, ponha
aqui no object, o dono ainda está fosco, que não terminou de percorrer a função.
Então a função foi interrompida, pausada.
Aí você chama o próximo next.
Você dá o generator next de novo.
Você nota que a quantia ainda está aqui, mas na próxima interação do loop, a quantia
tem valor um, um.
Então vai pegar valor um, vai retornar dentro do objeto value, propriedade value, e vai
incrementar.
Agora tem valor dois.
Quantia tem valor dois, mas você só vai obter na próxima interação.
Pela quantia valor dois retorna, porque está no yield de novo, só fica rodando a mesma
coisa porque está dando loop, cara interação.
Valor dois, dono false.
Aí fica dando esse cara direto, só fica contando.
E vai infinitamente até dar um overflow aqui.
Certo, você pode até fazer um loop aqui.
Deixa eu te mostrar.
Um loop infinito que chama o cara infinito.
While two, você vai falar generator next.
Pega esse cara aqui e põe dentro do console log para você ver.
Só para ver no que dá.
Eu acho que esse cara nunca vai parar.
Então eu estou um pouco assim, eu não quero fazer muito.
Não vou dar assim não.
Deixa eu fazer de outro maneira.
Vou dar uma variável aqui.
Index vou botar zero.
Eu vou dar um contar, sei lá, vai demorar não?
Uns 40 vezes para você ver.
Aí depois de dar o console log, dá um index, aumenta.
Vamos ver no que dá.
Certo, deu.
Deu, começou a ser not.
A gente fez um loop aqui começando do zero até o 39.
E ele fica chamando generator next.
Doze, o contador é doze, treze, quatorze, quinze.
E assim por diante, 39, 40, 41, uns 40 vezes.
Então pode continuar para fazer de novo.
Eu redeclarei o index, deixa eu tirar aqui.
Você note que ele fica rodando.
Então a função geradora nunca acaba, o que você fica chamando todo o tempo com generator
next.
Certo, então efetivamente você criou uma função infinita.
Está certo?
Então por essa aula só, essa aprendizada das funções geradoras no JavaScript generator
function.
Para você já sabe que esse cara faz o que significa.
Certo?
Então obrigado para assistir e até a próxima.