Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2023
Programação›Linguagens de programação
Código
ce163364
Banca
CESPE / CEBRASPE
Órgão
TBG
Ano
2023
Nível
Superior
Cargo
Ênfase: Desenvolvimento de Software
A partir do código JavaScript precedente, julgue o item a seguir.Ao ser executado, o código inicialmente irá mostrar na tela apenas um botão similar ao mostrado a seguir.Se esse botão for clicado, será apresentado um resultado similar ao que se segue.
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoC — Certo
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
JavaScript: funções geradoras e o protocolo de iteração
Gabarito: letra C (CERTO). O código define uma função geradora que, a cada chamada do método next(), incrementa um contador e retorna um objeto com as propriedades value e done — comportamento típico do protocolo de iteração do JavaScript. Ao ser executado, a página exibe apenas o botão; o resultado só aparece após o clique, que dispara a chamada ao gerador e exibe o valor retornado.
Uma função geradora é declarada com a sintaxe function* e, quando invocada, retorna um objeto iterador. Esse objeto possui o método next(), que executa o corpo da função até encontrar a palavra-chave yield (ou return), retornando um objeto com duas propriedades: value, que contém o valor produzido, e done, um booleano que indica se a iteração terminou. No código da questão, a função mostra() cria um contador n iniciado em 0 e define um método next() que soma 11 a n a cada chamada e retorna { value: n, done: false }.
Na prática, o fluxo é o seguinte: ao carregar a página, o JavaScript apenas define a função e associa o evento de clique ao botão — nada é exibido além do próprio botão. Quando o usuário clica, o evento dispara a chamada ao gerador, que executa next() e retorna o valor atualizado do contador. Esse valor é então inserido na página, por exemplo, via innerHTML ou textContent, produzindo o resultado mostrado na terceira imagem. A descrição do enunciado — primeiro o botão, depois o resultado após o clique — corresponde exatamente a esse comportamento.
A pegadinha da banca está em confundir o momento da execução: o código não exibe o resultado imediatamente ao carregar a página, mas apenas após a interação do usuário. Isso porque a chamada ao gerador e a exibição do valor estão dentro do manipulador de evento de clique, não no corpo principal do script. O candidato que lê o código rapidamente pode pensar que o valor é mostrado junto com o botão, mas a estrutura do código — com o addEventListener ou atributo onclick — deixa claro que a execução é condicionada ao clique.
Guarde a distinção entre a definição da função geradora e sua execução: a definição apenas cria o iterador quando chamada; a execução, que produz os valores, ocorre a cada next(). É exatamente essa separação que a questão explora — o botão é exibido no carregamento, e o resultado, somente após o clique.
1Carrega a página
2Exibe apenas o botão
3Usuário clica no botão
4Dispara o gerador (next())
5Exibe o valor retornado
LEVEL · soulevel.com.br
Alternativa C — ✅ Correto ⟵ GABARITO
A afirmativa está correta porque descreve com precisão o comportamento do código. Ao ser executado, o script carrega a página e renderiza apenas o botão, sem qualquer saída adicional — a função geradora é definida, mas não invocada nesse momento. O resultado só aparece quando o usuário clica no botão, pois é o evento de clique que dispara a chamada ao gerador e a exibição do valor retornado. Essa sequência — botão primeiro, resultado depois — é exatamente o que as imagens 2 e 3 ilustram, confirmando a descrição do enunciado.