A programação funcional corresponde à programação padrão é baseada no conceito de declarar o comportamento de um programa como um modelo matemático funcional, em vez de sequências explícitas de instruções para um processador, que é o principal conceito na programação imperativa.
A linguagem funcional enfatiza instruções e termos, em vez de executar instruções. Nesta programação, o resultado dependerá apenas dos parâmetros que são passados para uma função, diferentemente de outros tipos que obedecem a um estado local ou global.
Seu nome vem de funções matemáticas, que são a atribuição de um conjunto de entradas a um conjunto de saídas. Uma função matemática realmente não funciona, mas descreve o modelo de um processo, explicando por meio de uma fórmula o que um conjunto de entradas produz em uma função.
Idéias básicas
A base sobre a qual a programação funcional se baseou foi o cálculo lambda, desenvolvido durante a terceira década do século XX para definir e aplicar funções. O LISP foi a primeira linguagem de programação criada em 1960.
Embora a maioria das linguagens de programação consista em entradas, saídas e variáveis externas que podem ser configuradas ou usadas de dentro das funções, a programação funcional evita isso. A idéia é que toda vez que uma função é chamada com os mesmos parâmetros, ela deve retornar o mesmo valor.
Caracteristicas
As linguagens de programação funcional são chamadas de aplicativos, porque as funções são aplicadas aos seus parâmetros, além de declarativas e não processuais, pois as definições especificam o que você deseja calcular e não como é calculado.
Funções puras
Uma função é pura quando não tem efeitos colaterais observáveis, como alteração de variáveis externas, alterações no sistema de arquivos etc.
Essas funções são consideradas atraentes, pois não alteram expressamente nenhuma variável da qual outras partes do código possam depender em algum momento. Parece estranho codificar com essas restrições, mas essas funções devem ser consideradas determinísticas, previsíveis e compostáveis.
Recursos de primeira classe
As funções são consideradas como valores que podem ser atribuídos a variáveis, para que possam ser passadas e retornadas de outras funções. Em outras palavras, uma função pode ser usada como se fosse um parâmetro ou como um valor que está sendo retornado.
Isso implica que a função pode ser transmitida como tal, e não apenas o resultado da função. Por exemplo, considere a função double (x), que retorna o dobro do valor do seu parâmetro de entrada. Assim, o dobro (2) retornaria 4.
Como é uma função de primeira classe, o código (double (double (2)) seria o mesmo que o código double (4), permitindo que uma função seja aninhada como parâmetro para outra, e assim por diante.
Transparência referencial
Isso significa que nesse padrão de programação não há instruções de atribuição. Ou seja, novas variáveis devem ser definidas se você deseja armazenar valores adicionais. Portanto, o estado de uma variável é constante o tempo todo.
Isso elimina a menor possibilidade de efeitos indesejados, porque qualquer variável pode ser substituída por seu valor real durante qualquer ponto de execução do programa.
Recursão
Na programação funcional, não existem loops “for” e “while”. Em vez disso, a iteração depende da recursão. A recursão é implementada usando funções recursivas, que se chamam repetidamente até que o caso base seja atingido.
Imutabilidade
As variáveis são imutáveis, ou seja, não é possível modificar uma variável depois que ela foi inicializada. Embora uma nova variável possa ser criada, não é permitido modificar variáveis existentes.
Exemplos
Abordagens imperativas e declarativas
Por exemplo, a diferença entre essas abordagens pode ser analisada, executando a mesma operação nas duas disposições, que é filtrar os números ímpares de uma lista e substituir números pares menores que 5 por 5.
É o mesmo cálculo, com o mesmo resultado. No entanto, como você pode ver, o código imperativo é detalhado e não é imediatamente claro. Por outro lado, a abordagem declarativa é legível e explícita, porque se concentra no que você deseja obter.
Funções puras
O que é definido como funções puras e impuras pode ser esclarecido com alguns exemplos básicos:
Funções como objetos de primeira classe
Significa usar as funções da mesma maneira que os dados são usados. Portanto, eles podem ser passados como parâmetros para outra função. No exemplo a seguir, você pode passar a função int como um parâmetro para a função map:
>>> lista (mapa (int, [«1», «2», «3»]))
[1, 2, 3]
Eles podem ser atribuídos a variáveis e retornados. Por exemplo, no código a seguir, você pode atribuir a função hello_world e executar a variável como uma função.
Vantagem
– Concentre-se no que você deseja alcançar (declarativo) e não em como alcançá-lo (imperativo).
– Eles não contêm instruções de atribuição; portanto, depois de atribuir um valor às variáveis, elas não serão mais alteradas. Portanto, programas funcionais não contêm efeitos colaterais.
– O fluxo lógico é claro, pois o estado é menos disperso e não muda implicitamente.
– Suporta o conceito de avaliação diferida, o que significa que o valor é avaliado e armazenado apenas quando necessário.
– Como as funções puras não alteram nenhum estado e são completamente dependentes da entrada, elas são fáceis de entender. O valor de retorno fornecido por essas funções é o mesmo que o resultado produzido por elas.
– Devido à natureza das funções puras de impedir que variáveis ou quaisquer dados externos sejam alterados, a implementação da simultaneidade é eficaz.
– Funções são tratadas como valores, passando para outras funções como parâmetros. Isso melhora a compreensão e a legibilidade do código.
– Funções puras recebem parâmetros uma vez, produzindo saída imutável. O uso de valores inalteráveis facilita a depuração e o teste.
Mais curto e fácil de entender
Eles são mais curtos e fáceis de entender do que os imperativos. Estudos mostraram que a produtividade média do programador em termos de linhas de código é mais ou menos a mesma para qualquer linguagem de programação, traduzindo-se em maior produtividade.
Sem fluxo de controle
Chamar uma função não pode ter um efeito diferente do cálculo de seu resultado. Isso exclui uma fonte importante de erros, também tornando a ordem de execução irrelevante, pois nenhum efeito colateral pode alterar o valor de uma expressão e pode ser avaliado a qualquer momento.
O programador é dispensado do ônus de estabelecer um fluxo de controle. Como as expressões podem ser avaliadas a qualquer momento, as variáveis podem ser substituídas por seus valores.
Essa autonomia favorece que os programas funcionais sejam mais matematicamente gerenciáveis que os programas convencionais.
Desvantagens
– O paradigma de programação funcional não é simples, dificultando a compreensão de um iniciante.
– É difícil de manter, pois muitos objetos evoluem durante a codificação.
– Em alguns casos, escrever funções puras causa uma redução na legibilidade do código.
– Valores imutáveis em combinação com recursão podem levar a uma redução drástica no desempenho do sistema.
– A reutilização é muito complicada e requer refatoração constante.
– Escrever programas em um estilo recursivo em vez de usar loops ou loops pode ser uma tarefa muito assustadora.
– Os objetos podem não representar o problema corretamente.
– Embora escrever funções puras seja simples, combiná-las com o restante do aplicativo e com as operações de entrada / saída é bastante difícil
Formulários
A programação de inteligência artificial é feita em linguagens de programação funcional, e as técnicas de inteligência artificial migram para aplicativos do mundo real.
Também se destaca na implementação de modelos matemáticos complexos. Por esse motivo, um dos principais usos das linguagens funcionais tem sido tradicionalmente acadêmico. É útil para o desenvolvimento de especificações executáveis e implementações de protótipos.
Muitas linguagens funcionais também se destacam por implementar o processamento paralelo. Isso se deve à sua capacidade de tirar proveito das funções puras, que sempre retornam o mesmo valor, independentemente da ordem em que são executadas.
Metodologia funcional
O WhatsApp usa a linguagem de programação Erlang, que segue o modelo de programação funcional, permitindo assim que mais de cem de seus funcionários manipulem os dados pertencentes a cerca de 1,6 bilhão de pessoas.
Outra portadora importante do estilo de programação funcional é Haskell. É usado pelo Facebook em seu sistema antispam. Até o JavaScript, uma das linguagens de programação mais usadas, exibe as propriedades de uma linguagem funcional dinâmica.
Idiomas que suportam programação funcional
D
Foi desenvolvido após C ++, obtendo todos os seus benefícios e eliminando os pontos fracos observados por ter que ser compatível com C.
Erlang
É altamente escalável e simultâneo, sendo ideal para telecomunicações e outros aplicativos que recebem grandes quantidades de dados em ordem imprevisível.
Haskell
Esta é uma linguagem de programação funcional pura, que usa o cálculo Lambda para isso.
ML
É usado em aplicações matemáticas, científicas, financeiras, analíticas e outras. Um de seus pontos fortes é criar software para lidar com outros programas.
Caml objetivo
É um idioma de código aberto baseado no Caml. Ele tende a criar programas muito leves, ajudando-os a carregar e executar mais rapidamente do que os criados por outros idiomas.
Esquema
É baseado na sintaxe LISP e na estrutura ALGOL. Graças à sua simplicidade, é usado em muitos cursos de informática como uma introdução ao design de programas para demonstrar alguns dos fundamentos da programação de computadores.
Referências
- Quem está hospedando isso (2019). Aprenda a programação funcional: esse estilo de codificação vai explodir sua mente. Retirado de: whoishostingthis.com.
- Andrea Bertoli (2019). Uma introdução adequada à programação funcional. Retirado de: dev.to.
- Hacker Earth (2020). Programação Funcional. Retirado de: hackerearth.com.
- Clojure (2020). Programação Funcional. Retirado de: clojure.org.
- Akhil Bhadwal (2020). Programação Funcional: Conceitos, Vantagens, Desvantagens e Aplicações. Hackr. Retirado de: hackr.io.
- Guru99 (2020). O que é programação funcional? Tutorial com exemplo. Retirado de: guru99.com.