Prévia do material em texto
Prova de Programação Funcional Funções de Alta Ordem: Em programação funcional, o que são funções de alta ordem e como são utilizadas? A) Funções que operam em números reais; aplicadas em loops for. B) Funções que recebem ou retornam outras funções; passadas como argumentos. C) Funções com grande número de linhas de código; utilizadas em casos especiais. D) Funções que lidam com exceções; aplicadas em tratamento de erros. Imutabilidade: Por que a imutabilidade é uma característica importante na programação funcional? A) Facilita a alteração dinâmica de variáveis. B) Evita efeitos colaterais indesejados. C) Aumenta a complexidade do código. D) Torna a execução do programa mais lenta. Recursão: Na programação funcional, como a recursão é frequentemente utilizada em comparação com a programação imperativa? A) É evitada devido à complexidade. B) É mais comum devido à ausência de loops. C) É usada apenas para casos triviais. D) É reservada para funções de alta ordem. Expressões Lambda: O que são expressões lambda e qual sua função na programação funcional? A) Variáveis temporárias; reduzem a repetição de código. B) Funções anônimas; simplificam a sintaxe. C) Operadores matemáticos; melhoram a eficiência. D) Estruturas de controle; substituem declarações if. Mapeamento e Filtragem: Como o mapeamento e a filtragem são aplicados em listas na programação funcional? A) Mapeamento altera a ordem dos elementos, e filtragem remove elementos. B) Mapeamento aplica uma função a cada elemento, e filtragem mantém elementos que atendem a uma condição. C) Ambos são sinônimos e podem ser usados indistintamente. D) Mapeamento e filtragem são conceitos obsoletos em programação funcional. Monads: Em programação funcional, o que são monads e qual seu propósito? A) Estruturas de dados imutáveis; facilitam a manipulação de strings. B) Padrões de design; simplificam a implementação de herança. C) Tipos especiais de funções; permitem efeitos colaterais controlados. D) Subtipos de classes; melhoram a organização do código. Currying: Explique o conceito de currying na programação funcional e forneça um exemplo prático. A) Divisão de funções em partes menores; ex.: dividir uma lista em subconjuntos. B) Transformação de funções com múltiplos argumentos em cadeias de funções com um único argumento; ex.: soma(x)(y). C) Troca de argumentos em uma função; ex.: inverter a ordem de elementos em uma lista. D) Agrupamento de funções relacionadas em um único módulo; ex.: encapsular operações matemáticas. Tipos de Dados Imutáveis: Por que a imutabilidade de tipos de dados é enfatizada na programação funcional? A) Torna o código mais difícil de entender. B) Facilita a modificação dinâmica de valores. C) Evita efeitos colaterais e simplifica o rastreamento de mudanças. D) Aumenta a eficiência em operações de leitura. Pattern Matching: O que é pattern matching e como é utilizado na programação funcional? A) Comparação de padrões de código; usado para identificar bugs. B) Correspondência de padrões em dados; simplifica a manipulação de estruturas complexas. C) Troca de padrões em tempo de execução; melhora o desempenho. D) Transformação de padrões de design; utilizado em design gráfico. Funções Puras: Explique o conceito de funções puras na programação funcional e por que são importantes. A) Funções que operam apenas em dados numéricos; simplificam a aritmética. B) Funções que não têm efeitos colaterais; facilitam o teste e compreensão do código. C) Funções que não requerem argumentos; reduzem a complexidade. D) Funções que retornam múltiplos valores; melhoram a expressividade do código. Lazy Evaluation: O que é a avaliação tardia (lazy evaluation) e como ela difere da avaliação estrita? A) Avaliação que ocorre apenas quando o código é executado; oposta à avaliação estrita. B) Avaliação que ocorre em tempo de compilação; usada para otimizar o desempenho. C) Avaliação que prioriza operações de maior complexidade; mais eficiente que a avaliação estrita. D) Avaliação que ignora a ordem de execução; prejudica a performance. Folding (Redução): Como a função de redução (fold) é aplicada em programação funcional? A) Combina elementos de uma lista em uma única soma; ex.: somar todos os elementos. B) Separa uma lista em subconjuntos menores; ex.: dividir elementos pares e ímpares. C) Ordena uma lista de forma decrescente; ex.: organizar em ordem alfabética. D) Substitui elementos de uma lista por valores calculados; ex.: substituir por seus quadrados. Funções de Ordem Superior: O que são funções de ordem superior e como elas diferem de funções comuns? A) Funções que operam apenas em números inteiros; semelhantes a funções regulares. B) Funções que recebem outras funções como argumentos ou retornam funções; mais flexíveis e poderosas. C) Funções que não requerem argumentos; mais eficientes que funções regulares. D) Funções que aplicam padrões de design específicos; usadas para casos especiais. Monoides: Explique o conceito de monoides em programação funcional e forneça um exemplo prático. A) Estruturas de dados imutáveis; ex.: listas que não podem ser alteradas. B) Tipos especiais de funções; ex.: funções que lidam apenas com inteiros. C) Conjuntos de elementos com operações de concatenação e identidade; ex.: soma de números. D) Padrões de design para tratamento de exceções; ex.: tratamento de erros em tempo de execução. Tail Recursion: O que é tail recursion e como ela contribui para a eficiência em programação funcional? A) Recursão que ocorre na cauda da função; evita o estouro da pilha de chamadas. B) Recursão que utiliza apenas a cabeça da lista; simplifica a manipulação de dados. C) Recursão que prioriza a execução de operações na cabeça da função; aumenta a complexidade. D) Recursão que ocorre apenas em funções de ordem superior; requer mais memória. Monad Transformers: Explique o conceito de monad transformers e como eles são aplicados na composição de monads. A) Transformadores que alteram o tipo de monads; facilitam a manipulação de strings. B) Estruturas que combinam monads diferentes; usados para facilitar a gestão de estado e exceções. C) Monads que operam em múltiplas camadas; aplicados em casos avançados de recursão. D) Transformadores que convertem funções regulares em monads; utilizados para aumentar a eficiência. Efeitos Colaterais Controlados: Como a programação funcional lida com efeitos colaterais e por que isso é importante? A) Ignora efeitos colaterais; prejudica a expressividade do código. B) Controla efeitos colaterais usando monads; melhora a previsibilidade do programa. C) Incentiva efeitos colaterais em funções regulares; simplifica o desenvolvimento. D) Elimina efeitos colaterais apenas em funções puras; mantém a complexidade. Compreensão de Listas: O que é compreensão de listas (list comprehension) e como ela é aplicada em programação funcional? A) Construção de listas por meio de loops for; simplifica a lógica de iteração. B) Criação de listas usando expressões lógicas; simplifica a manipulação de condições. C) Operações de filtragem e mapeamento em listas; facilita a criação de novas listas. D) Combinação de listas com operadores lógicos; usado para realizar operações de união. Promessas (Promises): Em linguagens que suportam programação funcional, como promessas (promises)podem ser usadas para lidar com assincronia? A) Manipulação direta de eventos de temporização; evita a necessidade de promessas. B) Encadeamento de funções em callbacks; aumenta a complexidade do código. C) Resolução de promessas para lidar com resultados futuros; simplifica o tratamento assíncrono. D) Substituição de promessas por chamadas síncronas; melhora o desempenho. Type Classes: O que são type classes em programação funcional e como elas facilitam a polimorfismo? A) Classes abstratas para definição de tipos de dados; usadas para encapsular dados complexos. B) Módulos que agrupam tipos de dados relacionados; melhoram a organização do código. C) Abstrações que definem operações comuns para tipos de dados específicos; permitem polimorfismo ad-hoc. D) Interfaces gráficas que representam tipos de dados; facilitam a interação com o usuário.