Características funcionais de programação, exemplos, vantagens, desvantagens

Características funcionais de programação, exemplos, vantagens, desvantagens

O Programação funcional Corresponde ao padrão de programação baseado no conceito de declarar o processo de um programa como um modelo funcional matemático, e não como sequências explícitas de instruções para um processador, que é o principal conceito na programação imperativa.

A linguagem funcional enfatiza frases e termos em vez de executar instruções. Neste programa, 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.

Como o mapeamento funciona na linguagem de programação funcional de Haskell. Fonte: por Pluke - Trabalho próprio, CC0 Commons.Wikimedia.org.

Seu nome vem de funções matemáticas, que são a alocação de um conjunto de entradas para um conjunto de saídas. Uma função matemática realmente não funciona, mas descreve o modelo de um processo, explicando através de uma fórmula o que um conjunto de entradas produz em uma função.

[TOC]

Idéias básicas

A base na qual a programação funcional se baseava foi o cálculo lambda, que foi desenvolvido durante a terceira década do século XX 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 consiste em entradas externas, saídas e variáveis ​​que podem ser configuradas ou usadas a partir de funções, a programação funcional impede 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 funcionais são chamadas de aplicações, porque as funções se aplicam aos seus parâmetros, além de declaração e não procedimento, uma vez que 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 convincentes, pois não alterarão expressamente nenhuma variável na qual outras partes do código podem depender em algum momento. Parece desconfortável codificar com essas restrições, mas deve -se considerar que essas funções são determinísticas, previsíveis e componentes.

Funções de primeira classe

As funções são consideradas como valores que podem ser atribuídos a variáveis, para que possam passá -las e retornar de outras funções. Isto é, 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, em vez de apenas o resultado da função. Por exemplo, considere a função dupla (x), que retorna duas vezes o valor de seu parâmetro de entrada. Assim, o dobro (2) retornaria 4.

Pode atendê -lo: evolução da manutenção industrial: da origem até o presente

Como é uma função de primeira classe, o código (duplo (duplo (2)) seria o mesmo que o código duplo (4). Isso permite aninhar uma função como um parâmetro de outro e assim por diante.

Transparência referencial

Refere -se ao fato de que, neste padrão de programação, não há sentenças de atribuição. Isto é, novas variáveis ​​devem ser definidas se valores adicionais forem desejados. 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 há loops "para" 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 alcançado.

Imutabilidade

As variáveis ​​são imutáveis, ou seja, não é possível modificar uma variável depois de inicializar. Embora uma nova variável possa ser criada, as variáveis ​​existentes não são permitidas.

Exemplos

Abordagens imperativas e declarativas

Com um exemplo, a diferença entre essas abordagens pode ser analisada, realizando a mesma operação nas duas disposições, que é filtrar os números ímpares de uma lista, enquanto os números menores que 5 são substituídos por 5.

É o mesmo cálculo, com o mesmo resultado. No entanto, como pode ser visto, o código imperativo é detalhado e não está claro imediatamente. Por outro lado, a abordagem declarativa é legível e explícita, porque se concentra no que você deseja obter.

Funções puras

Você pode esclarecer o que é definido como funções puras e impuras com alguns exemplos básicos:

Funções como objetos de primeira classe

Significa usar funções da mesma maneira que os dados são usados. Portanto, eles podem passar 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 do mapa:

>>> Lista (mapa (int, ["1", "2", "3"])))))

[1, 2, 3]

Eles podem ser atribuídos a variáveis ​​e devolvê -las. Por exemplo, o código a seguir pode ser atribuído à função hello_world e depois executando a variável como uma função.

Vantagens

- Concentre -se no que você deseja alcançar (declarativo) e não em como alcançá -lo (imperativo).

- Eles não contêm frases de alocação; portanto, depois que as variáveis ​​recebem um valor, elas não mudarão mais. Portanto, os programas funcionais não contêm efeitos colaterais.

Pode atendê -lo: desastres tecnológicos

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

- Admite o conceito de avaliação diferida, o que significa que o valor é avaliado e armazenado quando necessário.

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

- Devido à natureza das funções puras de impedir a mudança de variáveis ​​ou dados externos, a implementação da concordância se torna eficaz.

- As funções são tratadas como valores, mudando para outras funções, como parâmetros. Isso melhora o entendimento e a legibilidade do código.

- As funções puras levam os parâmetros uma vez, produzindo uma saída imutável. Ao usar valores inalteráveis, a purificação e os testes são facilitados.

Mais curto e mais 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

Ao chamar uma função, você não pode ter um efeito diferente do cálculo de seu resultado. Isso exclui uma fonte importante de erros, tornando a ordem de execução irrelevante, pois nenhum efeito colateral pode alterar o valor de uma expressão, sendo capaz de ser avaliado a qualquer momento.

O programador é apaziguado 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 são mais matematicamente gerenciáveis ​​do que os programas convencionais.

Desvantagens

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

- É difícil manter, pois durante a codificação muitos objetos evoluem.

- Em alguns casos, ao escrever funções puras, uma redução na legibilidade do código é causada.

- 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 precisa de constante refatorização.

- Escrever programas com um estilo recursivo em vez de usar laços ou loops pode ser uma tarefa muito desencorajadora.

- Objetos podem não representar o problema corretamente.

Pode servir a você: 50 blogs de videogame recomendados

- Embora escrever funções puras acabem sendo simples, combiná -las com o restante da aplicação e com operações de entrada/saída é bastante difícil

Formulários

O programa de inteligência artificial é realizado em linguagens de programação funcionais e técnicas de inteligência artificial migram para aplicações do mundo real.

Também se destaca na implementação de modelos matemáticos complexos. Por esse motivo, um dos principais usos de idiomas funcionais é tradicionalmente acadêmico. É útil para desenvolver especificações executáveis ​​e implementações de protótipo.

Muitas linguagens funcionais também se destacam para implementar o processamento paralelo. Isso se deve à sua capacidade de aproveitar as 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 ERLAG, que segue o modelo de programação funcional, permitindo que mais de cem de seus funcionários lidem com os dados pertencentes a cerca de 1.600 milhões de pessoas.

Outro portador importante do estilo de programação funcional é Haskell. É usado pelo Facebook em seu sistema antispam. Até JavaScript, uma das linguagens de programação mais usadas, possui as propriedades de uma linguagem funcional dinâmica.

Idiomas que suportam programação funcional

D

Foi projetado após o C ++, obtendo todos os seus benefícios ao eliminar suas fraquezas observadas para ter que ser compatível com C.

Erlang

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

Haskell

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

Ml

É usado em tipos matemáticos, científicos, financeiros, analíticos e outros de outros tipos. Um de seus pontos fortes é fazer software para lidar com outros programas.

Caml objetivo

É uma linguagem de código aberto que é baseado em CAML. Tende a criar programas muito leves, ajudando -os a serem carregados e executados mais rapidamente do que os criados por outros idiomas.

Esquema

É baseado na sintaxe lisp e na estrutura de algol. Graças à sua simplicidade, ele é usado em muitos cursos de computador como uma introdução ao design de programas para mostrar alguns dos fundamentos da programação de computadores.

Referências

  1. O que está hospedando isso (2019). Aprenda programação funcional: este estilo de codificação vai explodir sua mente. Tirado de: whoisostingThis.com.
  2. Andrea Bertoli (2019). Uma introdução adequada ao programação funcional. Retirado de: Dev.para.
  3. Hacker Earth (2020). Programação funcional. Retirado de: Hakereph.com.
  4. Clojure (2020). Programação funcional. Retirado de: Clojure.org.
  5. Akhil Bhadwal (2020). Programação funcional: conceitos, adventos, desvantagens e aplicações. Hackr. Retirado de: hackr.Io.
  6. Guru99 (2020). O que é programação funcional? Com exemplo de tutorial. Retirado de: Guru99.com.