Questão
ID 67139Disciplina: Tecnologia da Informação
Assuntos: Conceitos e Propriedades das Linguagens de Programação, Programação Estruturada
Ano: 2025 Banca: PERFIL - ENADE Órgão: Terceiro Simulado Pnd
Em uma disciplina avançada de Paradigmas de Linguagens de Programação, a professora está discutindo as características e os casos de uso de linguagens funcionais, como Haskell ou Lisp, em comparação com linguagens imperativas ou orientadas a objetos. Ela quer que os alunos entendam como características como 'funções de primeira classe' e 'funções de ordem superior' permitem um estilo de programação mais declarativo e expressivo. Ela explica: "Em linguagens funcionais, as funções são tratadas como cidadãs de primeira classe. Isso significa que elas podem ser tratadas como qualquer outro valor: podem ser atribuídas a variáveis, passadas como argumentos para outras funções e retornadas como resultados de outras funções. Uma função que recebe outra função como argumento ou retorna uma função é chamada de **função de ordem superior**. Funções como `map`, `filter` e `reduce`, comuns em programação funcional, são exemplos de funções de ordem superior que operam sobre listas (ou outros iteráveis)." Para ilustrar, ela apresenta um problema: dado uma lista de números, `numeros = [1, 2, 3, 4, 5, 6]`, queremos obter uma nova lista contendo o quadrado de todos os números pares da lista original. Ela mostra duas soluções em Python, que suporta conceitos funcionais.
Solução 1 (Imperativa): `resultado = [] for n in numeros: if n % 2 == 0: resultado.append(n * n)`
Solução 2 (Funcional/Declarativa): `def eh_par(n): return n % 2 == 0 def ao_quadrado(n): return n * n resultado = list(map(ao_quadrado, filter(eh_par, numeros)))`
Qual é a principal vantagem da Solução 2 em termos de expressividade e legibilidade, segundo os princípios da programação funcional?