O que é Programação Funcional? Tutorial com Exemplo
O que é programação funcional?
A programação funcional (também chamada de FP) é uma maneira de pensar sobre a construção de software criando funções puras. Evita conceitos de estado compartilhado, dados mutáveis observados na Programação Orientada a Objetos.
As linguagens funcionais enfatizam expressões e declarações em vez da execução de declarações. Portanto, ao contrário de outros procedimentos que dependem de um estado local ou global, a saída do valor em FP depende apenas dos argumentos passados para a função.
Características da Programação Funcional
- O método de programação funcional foca nos resultados, não no processo
- A ênfase está no que deve ser calculado
- Os dados são imutáveis
- Programação funcional Decomponha o problema em 'funções
- É construído sobre o conceito de funções matemáticas que usa expressões condicionais e recursão para realizar o cálculo
- Ele não suporta iteração como instruções de loop e instruções condicionais como If-Else
História da programação funcional
- A base da Programação Funcional é o Cálculo Lambda. Foi desenvolvido na década de 1930 para a aplicação funcional, definição e recursão
- LISP foi a primeira linguagem de programação funcional. McCarthy o projetou em 1960
- No final dos anos 70, pesquisadores da Universidade de Edimburgo definiram o ML (Meta Language)
- No início dos anos 80, a linguagem Hope adiciona tipos de dados algébricos para recursão e raciocínio equacional
- No ano de 2004 Inovação da linguagem funcional 'Scala.'
Linguagens de Programação Funcional
O objetivo de qualquer linguagem FP é imitar as funções matemáticas. No entanto, o processo básico de computação é diferente na programação funcional.
Aqui estão algumas linguagens de programação funcional mais proeminentes:
- Haskell
- SML
- Clojure
- Scala
- Erlang
- peixe de água doce
- F#
- ML/OCaml Lisp / Esquema
- XSLT
- SQL
- Mathematica
Terminologia Básica de Programação Funcional e Concepts
Dados imutáveis
Dados imutáveis significa que você deve ser capaz de criar facilmente estruturas de dados em vez de modificar as que já existem.
Transparência referencial
Os programas funcionais devem executar operações como se fossem pela primeira vez. Assim, você saberá o que pode ou não ter acontecido durante a execução do programa, e seus efeitos colaterais. No termo PF é chamado de transparência referencial.
Modularidade
O design modular aumenta a produtividade. Módulos pequenos podem ser codificados rapidamente e têm maior chance de reutilização, o que certamente leva a um desenvolvimento mais rápido de programas. Além disso, os módulos podem ser testados separadamente, o que ajuda a reduzir o tempo gasto em testes unitários e depuração.
Manutenção
Manutenibilidade é um termo simples que significa que a programação FP é mais fácil de manter, pois você não precisa se preocupar em alterar acidentalmente qualquer coisa fora da função especificada.
função de primeira classe
'Função de primeira classe' é uma definição, atribuída a entidades de linguagem de programação que não possuem restrição de uso. Portanto, funções de primeira classe podem aparecer em qualquer lugar do programa.
Fechamento
O encerramento é uma função interna que pode acessar variáveis da função pai, mesmo após a execução da função pai.
Funções de ordem superior
As funções de ordem superior aceitam outras funções como argumentos ou as retornam como resultados.
As funções de ordem superior permitem aplicações parciais ou currying. Essa técnica aplica uma função a seus argumentos um por vez, pois cada aplicativo retorna uma nova função que aceita o próximo argumento.
função pura
Uma 'função pura' é uma função cujas entradas são declaradas como entradas e nenhuma delas deve ser ocultada. As saídas também são declaradas como saídas.
Funções puras agem sobre seus parâmetros. Não é eficiente se não retornar nada. Além disso, oferece a mesma saída para os parâmetros fornecidos
Exemplo:
Function Pure(a,b) { return a+b; }
funções impuras
O impuro funciona exatamente no oposto do puro. Eles têm entradas ou saídas ocultas; é chamado de impuro. As funções impuras não podem ser usadas ou testadas isoladamente, pois possuem dependências.
Exemplo
int z; function notPure(){ z = z+10; }
Composição de Função
A composição de função é a combinação de 2 ou mais funções para criar uma nova.
Estados Compartilhados
Estados compartilhados é um conceito importante na programação OOP. Basicamente, é adicionar propriedades aos objetos. Por exemplo, se um disco rígido for um objeto, a capacidade de armazenamento e o tamanho do disco podem ser adicionados como propriedades.
Side Effects
Os efeitos colaterais são quaisquer alterações de estado que ocorrem fora de uma função chamada. O maior objetivo de qualquer linguagem de programação FP é minimizar os efeitos colaterais, separando-os do restante do código do software. Na programação FP, é vital eliminar os efeitos colaterais do restante da lógica de programação.
Os benefícios da programação funcional
- Permite evitar problemas confusos e erros no código
- Mais fácil de testar e executar o teste de unidade e depurar o código FP.
- Processamento paralelo e simultaneidade
- Implantação de código quente e tolerância a falhas
- Oferece melhor modularidade com um código mais curto
- Aumento da produtividade do desenvolvedor
- Suporta funções aninhadas
- Construções Funcionais como Lazy Map & Lists, etc.
- Permite o uso eficaz do Cálculo Lambda
Limitações da Programação Funcional
- O paradigma da programação funcional não é fácil, por isso é difícil de entender para o iniciante
- Difícil de manter, pois muitos objetos evoluem durante a codificação
- Precisa de muita simulação e configuração ambiental extensa
- A reutilização é muito complicada e precisa ser constantemente refatorada
- Objetos podem não representar o problema corretamente
Programação Funcional vs. Programação Orientada a Objetos
Programação Funcional | OOP |
---|---|
FP usa dados imutáveis. | OOP usa dados mutáveis. |
Segue o modelo baseado em programação declarativa. | Segue o Modelo de Programação Imperativa. |
O foco é: “O que você está fazendo. no programa”. | O foco é “Como você está fazendo sua programação”. |
Suporta programação paralela. | Não há suporte para programação paralela. |
Suas funções não têm efeitos colaterais. | O método pode produzir muitos efeitos colaterais. |
O controle de fluxo é executado usando chamadas de função e chamadas de função com recursão. | O processo de controle de fluxo é conduzido usando loops e declarações condicionais. |
A ordem de execução das instruções não é muito importante. | A ordem de execução das instruções é importante. |
Suporta tanto “Abstração sobre Dados” quanto “Abstração sobre Comportamento”. | Suporta apenas “Abstração sobre Dados”. |
Conclusão
- A programação funcional ou FP é uma maneira de pensar sobre a construção de software com base em alguns princípios fundamentais de definição
- Os conceitos de programação funcional focam nos resultados, não no processo
- O objetivo de qualquer linguagem FP é imitar as funções matemáticas
- Algumas linguagens de programação funcional mais proeminentes: 1)Haskell 2)SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- Uma 'função pura' é uma função cujas entradas são declaradas como entradas e nenhuma delas deve ser ocultada. As saídas também são declaradas como saídas.
- Dados imutáveis significa que você deve facilmente criar estruturas de dados em vez de modificar as que já existem
- Permite evitar problemas confusos e erros no código
- O código funcional não é fácil, por isso é difícil de entender para o iniciante
- FP usa dados imutáveis enquanto OOP usa dados mutáveis