Programação funcional: características, exemplos, vantagens, desvantagens - Ciência - 2023


science
Programação funcional: características, exemplos, vantagens, desvantagens - Ciência
Programação funcional: características, exemplos, vantagens, desvantagens - Ciência

Contente

o programação funcional Corresponde ao padrão de programação que se baseia no conceito de declarar o procedimento de um programa como um modelo funcional matemático ao invés de sequências explícitas de instruções para um processador, que é o conceito principal na programação imperativa.

A linguagem funcional enfatiza declarações e termos, em vez de executar declarações. Nesta programação, o resultado dependerá apenas dos parâmetros que são passados ​​para uma função, ao contrário de outros tipos que obedecem a um estado local ou global.

Seu nome vem das 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 não faz realmente nenhum trabalho, mas sim descreve o modelo de um processo, explicando por meio de uma fórmula o que um conjunto de entradas produz em uma função.


Ideias básicas

A base sobre a qual a programação funcional foi baseada foi o cálculo lambda, que foi desenvolvido durante a terceira década do século 20 para definir e aplicar funções. LISP foi a primeira linguagem de programação desse tipo, projetada em 1960.

Embora a maioria das linguagens de programação consistam em entradas, saídas e variáveis ​​externas que podem ser definidas ou usadas a partir de funções, a programação funcional evita isso. A ideia é que toda vez que uma função for chamada com os mesmos parâmetros, ela deverá 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, assim como declarativas e não procedimentais, uma vez que as definições especificam o que deve ser calculado 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, mudanças no sistema de arquivos, etc.


Essas funções são consideradas convincentes, pois não alterarão expressamente nenhuma variável das quais outras partes do código possam depender em algum ponto. Parece estranho codificar com essas restrições, mas essas funções devem ser consideradas determinísticas, previsíveis e combináveis.

Recursos de primeira classe

Funções são consideradas como valores que podem ser atribuídos a variáveis, portanto, podem ser passados ​​e retornados de outras funções. Ou seja, uma função pode ser utilizada como se fosse um parâmetro ou como um valor que está sendo retornado.

Isso implica que a função pode ser passada como tal, em vez de apenas o resultado da função. Por exemplo, considere a função double (x), que retorna duas vezes o valor de seu parâmetro de entrada. Assim, duplo (2) retornaria 4.

Por se tratar de uma função de primeira classe, o código (double (double (2)) seria igual ao código double (4), o que permite aninhar uma função como parâmetro de outra, e assim por diante.


Transparência referencial

Refere-se ao fato de que neste 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, pois 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 há loops "for" e "while". Em vez disso, a iteração depende da recursão. A recursão é implementada usando funções recursivas, que chamam a si mesmas repetidamente até que o caso base seja alcançado.

Imutabilidade

As variáveis ​​são imutáveis, ou seja, não é possível modificar uma variável depois de inicializada. Embora você possa criar uma nova variável, modificar variáveis ​​existentes não é permitido.

Exemplos

Abordagens imperativas e declarativas

Com um exemplo, você pode analisar a diferença entre essas abordagens, executando a mesma operação em ambos os arranjos, que é filtrar os números ímpares de uma lista enquanto substitui 5 por números pares menores que 5.

É o mesmo cálculo, com o mesmo resultado. No entanto, como você pode ver, o código imperativo é prolixo 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:

Funciona como objetos de primeira classe

Significa usar funções da mesma forma que os dados são usados. Portanto, eles podem ser passados ​​como parâmetros para outra função. No exemplo a seguir, a função int pode ser passada como um parâmetro para a função de mapa:

> 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, em seguida, 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, após as variáveis ​​receberem um valor, elas não serão mais alteradas. Portanto, os programas funcionais não contêm efeitos colaterais.

- O fluxo lógico é claro, pois o estado é menos disperso e não é modificado implicitamente.

- Suporta o conceito de avaliação preguiçosa, o que significa que o valor só é avaliado e armazenado quando necessário.

- Como as funções puras não mudam nenhum estado e são totalmente dependentes da entrada, são fáceis de entender. O valor de retorno dado por tais funções é o mesmo que o resultado produzido por elas.

- Devido à natureza das funções puras para evitar que as variáveis ​​ou quaisquer dados externos mudem, a implementação da simultaneidade torna-se efetiva.

- As 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.

- As funções puras recebem os parâmetros uma vez, produzindo uma saída imutável. Usar valores inalteráveis ​​torna a depuração e o teste mais fáceis.

Mais curto e fácil de entender

Eles são mais curtos e mais fáceis de entender do que os imperativos. Estudos têm mostrado 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, o que se traduz em maior produtividade.

Sem fluxo de controle

Chamar uma função não pode ter um efeito diferente do que calcular seu resultado. Isso elimina uma grande fonte de erros, tornando também a ordem de execução irrelevante, já que nenhum efeito colateral pode alterar o valor de uma expressão, e ela pode ser avaliada a qualquer momento.

O programador é aliviado do fardo 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 torna os programas funcionais mais gerenciáveis ​​matematicamente do que os programas convencionais.

Desvantagens

- O paradigma de programação funcional não é simples, por isso é difícil para um iniciante entender.

- É 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.

- Reutilizar é muito complicado e requer refatoração constante.

- Escrever programas em um estilo recursivo em vez de usar loops ou loops pode ser uma tarefa muito difícil.

- Os objetos podem não representar o problema corretamente.

- Embora escrever funções puras seja fácil, combiná-las com o resto 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 funcionais 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 desenvolver especificações executáveis ​​e implementações de protótipos.

Muitas linguagens funcionais também se destacam na implementação de processamento paralelo. Isso se deve a sua capacidade de aproveitar funções puras, que sempre retornam o mesmo valor, independentemente da ordem em que são executadas.

Metodologia funcional

O WhatsApp utiliza a linguagem de programação Erlang, que segue o modelo de programação funcional, permitindo assim que mais de uma centena de seus funcionários manuseiem os dados pertencentes a cerca de 1,6 bilhão de pessoas.

Outro portador importante do estilo de programação funcional é Haskell. Ele é usado pelo Facebook em seu sistema antispam. Até mesmo o JavaScript, uma das linguagens de programação mais amplamente utilizadas, exibe as propriedades de uma linguagem funcional tipada dinamicamente.

Linguagens que suportam programação funcional

D

Ele foi projetado após C ++, obtendo todos os seus benefícios enquanto elimina seus pontos fracos observados de ter que ser compatível com C.

Erlang

É altamente escalável e simultâneo, o que o torna ideal para telecomunicações e outros aplicativos que recebem grandes quantidades de dados em uma ordem imprevisível.

Haskell

Esta é uma linguagem de programação funcional pura, que usa cálculo Lambda para isso.

ML

É usado em aplicações matemáticas, científicas, financeiras, analíticas e outras. Um de seus pontos fortes é fazer software para lidar com outros programas.

Objective Caml

É uma linguagem de código aberto baseada em Caml. Ele tende a criar programas muito leves, ajudando-os a carregar e rodar mais rápido do que aqueles criados por outras linguagens.

Esquema

É baseado na sintaxe LISP e na estrutura ALGOL. Devido à sua simplicidade, é usado em muitos cursos de ciência da computação como uma introdução ao design de programas para mostrar alguns dos fundamentos da programação de computadores.

Referências

  1. Quem está hospedando isto (2019). Aprenda programação funcional: este estilo de codificação vai explodir sua mente. Retirado de: whoishostingthis.com.
  2. Andrea Bertoli (2019). Uma introdução adequada à programação funcional. Retirado de: dev.to.
  3. Hacker Earth (2020). Programação funcional. Retirado de: hackerearth.com.
  4. Clojure (2020). Programação funcional. Retirado de: clojure.org.
  5. Akhil Bhadwal (2020). Programação funcional: conceitos, vantagens, desvantagens e aplicativos. Hack. Retirado de: hackr.io.
  6. Guru99 (2020). O que é programação funcional? Tutorial com exemplo. Retirado de: guru99.com.