Posso usar programação funcional no meu idioma?

Aqui está uma tradução amadora de um ensaio de Eric Normand, consultor e palestrante que promove a programação funcional.

Fiquei bastante livre com os termos, não hesitei em usar o inglês como um "recurso". Estou confuso com a tradução literal dos termos do programador. Aprecie a leitura

Resumo: respondemos diretamente à pergunta, mas depois analisamos os preconceitos ocultos por trás dela.


Frequentemente, desenvolvedores experientes me perguntam: "O que a programação funcional me dá que eu não tenho? Posso começar a usar o FP no meu próprio idioma?" Esta é uma ótima pergunta, espero poder dar uma resposta decente.


Eu entendo completamente a aparência desse problema. JavaScript tem map , filter e reduce . O Java 8 tem fluxos ( decidi usar o inglês em vez da palavra "fluxo" - aprox. Tradutor ). Parece que cada idioma recebe cada vez mais recursos funcionais, incluindo estruturas de dados imutáveis , funções de primeira ordem, composição de funções, desestruturação e boa digitação.


E eu concordo: você pode usar o FP em qualquer idioma .


A programação funcional é apenas um paradigma. Assim como você pode escrever em um estilo processual, orientado a objeto ou lógico em qualquer idioma, também pode escrever em um estilo funcional em qualquer idioma.


Espere um pouco. Esta é a resposta para a pergunta. Mas é assim tão simples?


Pergunte a si mesmo: posso usar OOP em C? De acordo com o que eu disse acima, a resposta é sim. Além disso, eu já criei pequenos sistemas de objetos em C anteriormente. Mas por que, então, preciso de uma linguagem orientada a objetos se posso usar objetos em C? Parecia que meu sistema de objetos me fornecia todos os recursos necessários para o OOP. Mas aqui está outra pergunta: eu poderia usar OOP em C sem saber OOP? Eu duvido.


Esses paradigmas são chamados paradigmas porque essas são abordagens holísticas de como resolver problemas. OOP divide a tarefa em objetos que interagem entre si por meio de mensagens. FP representa uma tarefa como dados que exibem o estado de um processo simulado. A abordagem processual descreve a solução como um conjunto de etapas claras. Cada paradigma oferece uma maneira diferente de resolver o problema. Se você acha que pode usar o FP em Java sem ser especialista em FP, diz que a programação funcional não é um paradigma, mas apenas um conjunto de recursos (dados imutáveis, funções puras, composição, etc.).


Eu já me deparei com isso muitas vezes. As pessoas afirmam escrever em estilo funcional em JavaScript. De fato, eles apenas usam map e reduce juntamente com várias funções puras . E dá bons resultados, mas, em geral, seu código é processual. Eles estudaram não um paradigma, mas apenas suas características.


A vantagem de uma linguagem que impõe rigidamente um paradigma é que ela ensina a usar essa abordagem para resolver problemas. E quanto mais ele o impõe, mais frequentemente você terá que tentar resolver o problema dentro da estrutura desse paradigma. Quanto mais funcional o seu idioma, mais você praticará usando uma abordagem funcional para resolver problemas. O mesmo vale para OOP e estilo processual. Em resumo, você treina por não conseguir usar as abordagens com as quais está acostumado.


Deixe-me fazer uma declaração ainda mais controversa: fora dos idiomas funcionais (Clojure, Haskell, Elm, Scala, Erlang, etc.), não são usados ​​muitos FPs. Exceto quando os desenvolvedores já estão familiarizados com o estilo funcional, graças à rica experiência, eles usam apenas migalhas do que o paradigma oferece. E eles sentem falta da coisa mais importante: a oportunidade de encarar a tarefa de um ângulo diferente.


Não estou dizendo que é impossível realmente aprender FP usando JavaScript, mas isso exigirá autodisciplina e ajuda . O idioma não o guiará nesse caminho. Você terá que fazer isso sozinho ou encontrar alguém que o ajude.


Conclusão


Todos os paradigmas são excelentes porque "um ponto de vista é equivalente a 80 pontos de QI . " Você pode usar qualquer paradigma em qualquer idioma. Mas é muito difícil estudar o paradigma sem mergulhar nele. E é muito difícil mergulhar sem usar a linguagem que a impõe. Até fazer isso, você usará os recursos do paradigma, mas não resolverá os problemas de uma nova maneira. Em geral, a programação funcional não é um conjunto de recursos. Se você quiser aprender, mergulhe nele.

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


All Articles