Por que você deve pensar em programação funcional

Olá Habr! Apresento a você a tradução do meu artigo “Por que você deveria pensar em programação funcional” , dedicado à programação funcional.

imagem

Por que você deveria pensar em programação funcional? Vamos responder às seguintes perguntas:

  • Seus projetos estão sempre no prazo?
  • Os usuários tiveram alguma reclamação?
  • O suporte ao projeto já levou muito tempo?
  • A nova funcionalidade sempre se ajusta bem à arquitetura existente?

Se as respostas para todas as perguntas acima forem positivas, você não precisará alterar nada, sua equipe é um exemplo raro de equipe, metodologia e ferramentas harmoniosas. Caso contrário, você deve estar aberto a novas abordagens para resolver seus problemas, incluindo uma visão crítica das linguagens de hardware e de programação usadas.

Primeiro olhar


Como você sabe, os programadores são pessoas extremamente criativas, mas ao mesmo tempo tendem a seguir algumas tendências ao escolher uma linguagem de programação. Entre um grande número de idiomas, os idiomas funcionais estão se tornando cada vez mais populares entre fãs e empresas de todo o mundo estão usando-os com mais confiança. O uso de linguagens funcionais pode aumentar significativamente a produtividade e a qualidade do trabalho dos programadores. Naturalmente, isso depende de uma combinação de tarefas, linguagem e habilidades de programação. Nesse caso, o programador simplesmente descreve o que deseja, em vez de listar a sequência de ações necessárias para obter o resultado. Assim, o desenvolvedor se concentra no alto nível "o que é necessário" em vez de ficar preso no baixo nível "como fazê-lo".

Programação funcional é o estilo de escrever programas, compilando um conjunto de funções. Seu princípio básico é agrupar quase tudo em uma função, escrever muitas pequenas funções reutilizáveis ​​e depois chamá-las uma após a outra. Além disso, a estrutura dessas funções deve obedecer a certas regras e resolver alguns problemas.

Portanto, se qualquer problema puder ser resolvido combinando chamadas para várias funções, então:

  1. Como implementar condições if-else?
  2. Como resolver truques com exceção nula?
  3. Como garantir que a função seja realmente "reutilizável" e possa ser usada em qualquer lugar?
  4. Como garantir que os dados transferidos para nossas funções sejam alterados e possam ser usados ​​em outros lugares?
  5. Se uma função assume vários valores, mas quando combinada em uma cadeia, você pode passar apenas uma função, então como fazemos essa função parte da cadeia?

Para resolver todos esses problemas, as linguagens funcionais fornecem ferramentas e soluções da matemática, como mônadas, functores etc.

Os benefícios da programação funcional são reconhecidos há muito tempo pelo público em geral. O desenvolvimento bem-sucedido de software geralmente se resume à simplificação dos mecanismos existentes que permitem que novos aplicativos se adaptem aos requisitos dos usuários modernos. E, ao mesmo tempo, devemos nos apressar, tendo conseguido apresentar produtos aos clientes com possibilidades ilimitadas em pouco tempo. Os requisitos de alteração são muito mais fáceis de seguir quando os aplicativos desenvolvidos podem ser divididos em várias funções simples e fáceis de testar. Tais algoritmos não têm efeitos colaterais complicados e formulações abstratas destinadas a resultados em escala global.

Então, por que os especialistas ignoram a programação funcional por tanto tempo? E por que está se tornando tão comum hoje?

Onde a programação funcional é usada no mundo real?


Como a programação funcional é principalmente uma abordagem para escrever código, você pode usar seus princípios em qualquer idioma. No entanto, existem idiomas aperfeiçoados por uma abordagem funcional. Linguagens funcionais mais modernas, como Elm e Elixir, de acordo com o GitHub e o Stack Overflow, estão gradualmente e confiantemente ganhando popularidade. A crescente popularidade do JavaScript também aumentou o interesse em conceitos de programação funcional para uso nessa linguagem. Além disso, desenvolvedores experientes na área de programação funcional começaram a trabalhar em ambientes de aplicativos Web únicos - SPA e, como resultado, temos Redux, React, MobX e outras bibliotecas usadas por milhões de pessoas.

imagem

Exemplos da vida real:

  • Apache spark
  • Escaldante (do Twitter)
  • Apache kafka
  • Finagle (do Twitter)
  • Aka
  • Autocad
  • emacs (LISP)

Então, o que é programação funcional, de onde veio esse boom e por que deveria ser considerado? Vamos descobrir.

Sobre programação funcional


Alguns anos atrás, apenas alguns especialistas tinham uma idéia sobre programação funcional, mas nos últimos três anos, quase todas as bases de código de grandes aplicativos usaram ativamente idéias tiradas do mundo da programação funcional. E há razões objetivas para isso:

  • programação funcional permite escrever códigos mais concisos e previsíveis
  • é mais fácil verificar (embora não seja fácil aprender do zero)

Principais recursos do desenvolvimento de software usando programação funcional


  • A função de limpeza é muito simples. Sempre deve retornar o mesmo resultado. Com os mesmos valores de X e Y, sempre obtemos o mesmo resultado da função. A previsibilidade desempenha um papel importante durante a execução do programa na programação funcional.
  • Evite condições gerais, dados voláteis e efeitos colaterais;
    Um objeto imutável é um objeto cujo estado não pode ser alterado após sua criação. Objetos imutáveis ​​são mais orientados a threads do que objetos mutáveis. Se a função não funcionar previsivelmente, isso levará a efeitos colaterais indesejáveis. Em linguagens imperativas, uma função no processo de implementação pode ler e alterar os valores de variáveis ​​globais e executar entrada / saída. Portanto, se chamarmos a mesma função duas vezes com o mesmo argumento, pode acontecer que obtenhamos dois resultados diferentes. Esse recurso é chamado de efeito colateral.

    A programação funcional nos ajuda a escrever código orientado a threads.
  • A prevalência de uma abordagem declarativa e não imperativa.

Função Composição


A composição de funções é uma abordagem de programação funcional que envolve chamar algumas funções como argumentos de outras pessoas para criar uma composição complexa de funções mais simples. Esse método de layout permite que você pegue duas ou mais funções simples e as combine em uma função mais complexa que executa subfunções em uma ordem lógica com qualquer dado. Para obter esse resultado, você coloca uma função dentro de outra e executa operações com funções externas no resultado da função interna até obter o resultado. E o resultado pode ser diferente, dependendo da ordem em que as funções são aplicadas.

Como resultado, com uma ordem lógica diferente de chamar funções puras e o mesmo valor do argumento, obteremos funcionalidades mais complexas que nos fornecem o resultado desejado e o tornam previsível.

imagem

Benefícios da Programação Funcional


A programação funcional ajuda a tornar o código mais fácil de entender, previsível e mais fácil de ler. O uso dos princípios de programação funcional ajuda a se livrar de abstrações desnecessárias com comportamento imprevisível, para tornar o programa mais previsível e reduzir o número de possíveis erros.

Em linguagens funcionais, as funções podem ser passadas para outras funções como argumento ou retornadas como resultado. As funções que recebem argumentos funcionais são chamadas de funções ou funcionais de ordem superior. O recurso mais popular é o cartão. um mapa que aplica uma determinada função a todos os elementos da lista, formando outra lista a partir dos resultados.

Na programação puramente funcional, o operador de atribuição está ausente, os objetos não podem ser alterados e destruídos, os novos só podem ser criados decodificando e sintetizando os existentes. O coletor de lixo interno cuidará de objetos desnecessários. Devido a isso, em uma linguagem funcional pura, todas as funções estão livres de efeitos colaterais. No entanto, isso não impede que esse idioma imite algumas propriedades imperativas úteis, como exceções e matrizes mutáveis. Claro, existem truques especiais para isso.

Desvantagens da programação funcional


  • Um dos problemas da programação funcional é que ela é diferente do que você já conhece. Você precisa reaprender muito do que já sabe em um ambiente imperativo! Muitos desenvolvedores experientes que já sabem o que já sabem não resolverão os problemas de maneira diferente. Leva tempo e esforço para pensar de forma diferente.
  • É fácil escrever funções limpas, mas combiná-las em um aplicativo completo é onde as coisas ficam mais complicadas.
  • Grande problema com desempenho previsível. Usar apenas valores imutáveis ​​e recursão pode potencialmente levar a problemas de desempenho, incluindo uso e velocidade de RAM; portanto, a maioria das linguagens funcionais não é uma opção particularmente boa para sistemas em tempo real suave ou rígido ou computação incorporada.
  • A programação funcional tende a escrever código de uma forma abstrata demais quando o próprio programador não entende mais o que escreveu depois de um tempo.
  • Funções puras e E / S não são realmente mistas.

Conclusão


Se você e sua equipe de desenvolvimento parecerem que seu estilo de codificação não oferece o nível necessário de gerenciamento de complexidade em sua área de negócios, entupindo seu código com lixo de sintaxe desnecessário, o que leva a uma perda de tempo, tente a programação funcional. Assim, em áreas relacionadas a um grande número de cálculos ou transformações de dados, programação paralela / assíncrona, é possível obter vantagens significativas, imersas na programação funcional.

Escrever código em uma linguagem funcional oferece a oportunidade de analisar o problema de uma perspectiva diferente, onde o desenvolvimento de sua solução pode ser mais eficiente. E isso simplesmente aumentará o número de maneiras de expressar suas idéias.

Ao desenvolver sua solução usando o paradigma de programação funcional, você acelerará todo o processo de desenvolvimento cada vez mais rápido, tornando-se cada vez mais experiente. Parece que você está dirigindo seu carro em alta velocidade, comparado à maneira como os programadores imperativos se movem.

A programação funcional pode mudar seu estilo de codificação para melhor. Mas dominar isso é bastante difícil e demorado, e muitas postagens e tutoriais não levam em consideração os detalhes (por exemplo, mônadas, functores de aplicativos etc.) e não dão exemplos práticos que ajudariam os iniciantes a usar métodos poderosos de programação funcional todos os dias. Mas você pode atrair programadores experientes para a equipe, o que economizará tempo, esforço e dinheiro.

imagem

Se você fizer tudo certo, o resultado será mais compreensível, conciso e você terá um código legível. Não é isso que todos queremos?

Roman Taluev,
Desenvolvedor de software Quasarbyte

Source: https://habr.com/ru/post/pt438396/


All Articles