Por que e o que é Programação Funcional?

Fala pessoal!

Hoje vamos falar um pouco de paradigma e programaçāo funcional (FP). Paradigma funcional é uma abordagem diferente de trabalhar com desenvolvimento de software do qual a maioria dos desenvolvedores estāo acostumados. Provavelmente você como a maioria dos desenvolvedores esta trabalhando ou trabalhou com os paradigmas Imperativo e / ou Orientado a Objeto (OO). Entāo o paradigma funcional tem algumas diferentes ideias para resolver o mesmos problemas quais imperativo e orientaçāo a objeto resolvem também, e como tudo tem prós e contras para serem avaliados.

Nesses últimos anos eu estava usando um pouco de abordagem funcional no meu código por osmose, porque isso fazia meu código melhor e simple que OO. Na maioria do tempo eu sabia a implementaçāo, mas eu nāo sabia sobre o significado do que eu estava usando e os benefícios teóricos. Eu quero dizer que eu podia ver os benefícios no meu código, mas eu nāo sabia quais eles realmente eram. Em outras palavras isso era apenas uma percepçāo. Este ano eu comecei a trabalhar em um projeto onde nós estávamos usando bastante técnicas funcionais junto com OO, e trabalhando com pessoas bastante inteligentes que sabiam bastante de programaçāo funcional. Isso me mostrou que era importante aprofundar o conhecimento em FP.

Eu nāo estou estudando FP para trabalhar com sistemas onde eu usarei 100% de FP, mas para abrir a minha mente para novas soluçōes para velhos problemas que eu estava resolvendo na maioria das vezes usando uma abordagem OO. Como quando estudamos outra linguagem ou framework para ver novas ideias e soluçōes de problemas os quais nós resolvemos no nosso dia a dia, estudar um novo paradigma tem o mesmo objetivo.


Mas quais sāo as principais ideias de programaçāo funcional?

É possível dizer que imutabilidade, evitar efeitos colaterais, recursāo, e funçōes puras sāo as principais ideias de FP. Eles sāo a base para iniciar a usar e principalmente entender FP. Na minha opiniāo entender esta base é o mais difícil. Quando nós temos somente uma visāo superficial FP parece simples, mas quando começamos a nos aprofundar no paradigma podemos ver a complexidade.

Por que estudar FP pode ser difícil?

Eu posso ver duas razōes para isso. Primeiramente, fazer a troca de OO para FP nāo é simples porque os conceitos que temos em nossa mente e usamos em toda nossa vida profissional por um longo tempo sāo totalmente diferentes. A segunda razāo, e na minha opiniāo mais importante, é que FP vem da matemática e nós, desenvolvedores, quando começamos a aprendê-la dificilmente começamos pela matemática. Como o paradigma imperativo teve origem nas máquinas de Touring, o paradigma funcional vem do Lambda Calculus e na minha opiniāo esse é a primeira coisa que devemos estudar para tornar o processo mais suave.

Mas, quais sāo os benefícios?

Se aprender o FP é difícil e temos que investir uma boa quantidade de tempo e esforço para isso, entāo temos que ser recompensados. Na minha curta experiência com FP as recompensas que pude ver foram:

Código mais simples, muito mais simple de usar Single Responsibility Principle (SRP); Funçōes pequenas. Provavelmente a maioria das suas funçōes nāo tem mais de 5 linhas; Inteligibilidade. Com um código simples e funçōes pequenas o código se torna realmente intelegível. Nāo esqueça que a na maioria do nosso tempo nós estamos lendo código; Imutabilidade e funçōes puras. Nāo é necessário se preocupar se o valor da variável mudou ou nāo, porque nós nāo temos variáveis. Passar um valor para uma funçāo e saber que o resultado é sempre o mesmo torna o código muito mais previsível;


Nós podemos adicionar muito mais benefícios a FP com paralelismo, mas para mim a melhor é abrir a mente para uma nova abordagem e melhorar a nossa habilidade de resolver problemas.

A melhor forma de aprender FP, na minha opiniāo, é aprender Lambda Calculus, entender os conceitos base, e depois escolher uma linguagem para se aprofundar.

Se você está nesta jornada ou pensando em começar, deixe um comentário e boa experiência!

Written on December 1, 2016