Programação Funcional - Introdução
Linguagens de programação funcional são especialmente projetadas para lidar com computação simbólica e aplicativos de processamento de lista. A programação funcional é baseada em funções matemáticas. Algumas das linguagens de programação funcional populares incluem: Lisp, Python, Erlang, Haskell, Clojure, etc.
Linguagens de programação funcional são categorizadas em dois grupos, ou seja -
Pure Functional Languages- Esses tipos de linguagens funcionais suportam apenas os paradigmas funcionais. Por exemplo - Haskell.
Impure Functional Languages- Esses tipos de linguagens funcionais suportam os paradigmas funcionais e a programação de estilo imperativo. Por exemplo - LISP.
Programação Funcional - Características
As características mais proeminentes da programação funcional são as seguintes -
Linguagens de programação funcional são projetadas no conceito de funções matemáticas que usam expressões condicionais e recursão para realizar cálculos.
Suporta programação funcional higher-order functions e lazy evaluation características.
Linguagens de programação funcional não oferecem suporte a controles de fluxo como instruções de loop e instruções condicionais como If-Else e Switch Statements. Eles usam diretamente as funções e chamadas funcionais.
Como OOP, as linguagens de programação funcional oferecem suporte a conceitos populares, como Abstração, Encapsulamento, Herança e Polimorfismo.
Programação Funcional - Vantagens
A programação funcional oferece as seguintes vantagens -
Bugs-Free Code - A programação funcional não suporta state, então não há resultados de efeito colateral e podemos escrever códigos sem erros.
Efficient Parallel Programming- Linguagens de programação funcional NÃO têm estado mutável, portanto, não há problemas de mudança de estado. Pode-se programar "Funções" para funcionar paralelamente como "instruções". Esses códigos oferecem fácil reutilização e testabilidade.
Efficiency- Os programas funcionais consistem em unidades independentes que podem ser executadas simultaneamente. Como resultado, esses programas são mais eficientes.
Supports Nested Functions - A programação funcional oferece suporte a funções aninhadas.
Lazy Evaluation - A programação funcional oferece suporte a construções funcionais preguiçosas, como listas preguiçosas, mapas preguiçosos etc.
Como desvantagem, a programação funcional requer um grande espaço de memória. Como não possui estado, é necessário criar novos objetos a cada vez para realizar ações.
A Programação Funcional é usada em situações em que temos que realizar muitas operações diferentes no mesmo conjunto de dados.
Lisp é usado para aplicativos de inteligência artificial, como aprendizado de máquina, processamento de linguagem, modelagem de fala e visão, etc.
Os interpretadores Lisp incorporados adicionam programabilidade a alguns sistemas como o Emacs.
Programação Funcional vs. Programação Orientada a Objetos
A tabela a seguir destaca as principais diferenças entre a programação funcional e a programação orientada a objetos -
Programação Funcional | OOP |
---|---|
Usa dados imutáveis. | Usa dados mutáveis. |
Segue o modelo de programação declarativo. | Segue o modelo de programação imperativa. |
O foco está em: “O que você está fazendo” | O foco está em "Como você está indo" |
Suporta Programação Paralela | Não é adequado para programação paralela |
Suas funções não têm efeitos colaterais | Seus métodos podem produzir efeitos colaterais graves. |
O controle de fluxo é feito usando chamadas de função e chamadas de função com recursão | O controle de fluxo é feito por meio de loops e instruções condicionais. |
Ele usa o conceito de "Recursão" para iterar os Dados de Coleta. | Ele usa o conceito de "Loop" para iterar os dados de coleta. Por exemplo: For-each loop in Java |
A ordem de execução das instruções não é tão importante. | A ordem de execução das instruções é muito importante. |
Suporta "Abstração sobre Dados" e "Abstração sobre Comportamento". | Suporta apenas "Abstração sobre Dados". |
Eficiência de um Código de Programa
A eficiência de um código de programação é diretamente proporcional à eficiência do algoritmo e à velocidade de execução. Boa eficiência garante maior desempenho.
Os fatores que afetam a eficiência de um programa incluem:
- A velocidade da máquina
- Velocidade do compilador
- Sistema operacional
- Escolhendo a linguagem de programação certa
- A forma como os dados em um programa são organizados
- Algoritmo usado para resolver o problema
A eficiência de uma linguagem de programação pode ser melhorada executando as seguintes tarefas -
Removendo o código desnecessário ou o código que vai para o processamento redundante.
Fazendo uso de memória ideal e armazenamento não volátil
Fazendo o uso de componentes reutilizáveis sempre que aplicável.
Fazendo o uso do tratamento de erros e exceções em todas as camadas do programa.
Criando código de programação que garante a integridade e consistência dos dados.
Desenvolvendo o código do programa compatível com a lógica e o fluxo do design.
Um código de programação eficiente pode reduzir o consumo de recursos e o tempo de conclusão tanto quanto possível, com risco mínimo para o ambiente operacional.