Questão
ID 67441Disciplina: Tecnologia da Informação
Assuntos: Coesão, Acoplamento e Modularidade, Conceitos e Propriedades das Linguagens de Programação
Ano: 2025 Banca: PERFIL - ENADE Órgão: Quarto Simulado Pnd
Em uma disciplina de Paradigmas de Linguagens de Programação, a professora está explicando o conceito de 'lazy evaluation' (avaliação preguiçosa), uma estratégia de avaliação usada por algumas linguagens de programação funcionais, como Haskell. Ela quer que os alunos compreendam como a avaliação preguiçosa se difere da 'eager evaluation' (avaliação ansiosa), que é o padrão na maioria das linguagens imperativas e orientadas a objetos. Ela explica: "Na **avaliação ansiosa**, as expressões são avaliadas assim que são vinculadas a uma variável. Se você escreve `x = 1 + 2`, o cálculo é feito imediatamente e `x` armazena o valor 3. Na **avaliação preguiçosa**, a avaliação de uma expressão é adiada até que seu valor seja realmente necessário. A variável `x` não armazenaria o valor 3, mas sim uma 'promessa' ou 'thunk' que representa a computação `1 + 2`. O cálculo só é realizado na primeira vez que `x` é usado em outra expressão." Para ilustrar o poder da avaliação preguiçosa, ela apresenta um cenário: a capacidade de trabalhar com estruturas de dados infinitas. Ela mostra um exemplo em pseudocódigo funcional:
`definir numeros_naturais = [1, 2, 3, ...]` (uma lista infinita) `definir primeiros_cinco = pegar(5, numeros_naturais)`
Como a avaliação preguiçosa torna possível trabalhar com uma lista infinita como `numeros_naturais`?
I. Na avaliação ansiosa, a tentativa de criar a lista `numeros_naturais` causaria um laço infinito e o programa travaria, pois ele tentaria gerar todos os números naturais de uma vez para colocar na memória.
II. Na avaliação preguiçosa, a lista `numeros_naturais` não é realmente criada na memória. Ela existe como uma 'receita' para gerar o próximo número quando solicitado. A função `pegar(5, ...)` só força a avaliação dos cinco primeiros elementos. O resto da lista infinita permanece não computado.
III. A avaliação preguiçosa permite a criação de código mais modular e compor funções de forma mais limpa, pois desacopla a geração de dados do seu consumo.
É correto o que se afirma em: