ilegra Engineering Blog

Programação funcional - Composição

O paradigma de programação funcional e suas diversas ramificações tem se mostrado uma área de estudo relevante no que diz respeito a escalabilidade de software, produtividade e simplicidade. Porém, há uma série de discussões que tratam da aplicação do paradigma a problemas concretos de negócio. Até que ponto deve-se considerar aplicar as soluções funcionais para questões fora do domínio matemático? E de que forma isto se dá? Para responder, é necessário desmistificar certas questões.

Funções

No mundo da programação imperativa, os tipos primitivos são valores e as funções são componentes que realizam operações modificando o estado da aplicação. Já no paradigma funcional, as funções tem uma posição privilegiada, a ponto de serem consideradas cidadãos de primeira classe (Higher order functions).

Isto significa dizer que no paradigma funcional uma função tem o mesmo peso ou importância que um tipo primitivo (funções são valores). Sendo assim, elas aparecerão de forma muito mais frequente no decorrer dos seus blocos de código (funções podem receber ou retornar outras funções, por exemplo).

Complexidade

Como podemos resolver problemas de negócio complexos com funções? Complexidade é o ponto central aqui.

Gerenciar a complexidade é um dos maiores problemas encontrados durante o desenvolvimento de software e também um ponto crucial na implementação de aplicações sustentáveis. Para gerenciar, o paradigma funcional tem uma solução: a composição. Por meio de composição é possível criar complexidade a partir da simplicidade de acordo com a necessidade.

Princípio da composicionalidade: Propriedade das expressões complexas cujo sentido é determinado pelos sentidos dos seus constituintes e pelas regras usadas para os combinar - Infopédia

Composição de funções - Classificação

A partir da ideia de composição, tem-se uma série de nomenclaturas utilizadas para classificar os tipos de relações possíveis entre as funções. Surge aí, a noção de Applicatives, Functors, Monoids, Monads (dentre outros), frequentemente citados em diversas fontes de pesquisa relacionadas as linguagens funcionais.

O conhecimento dos termos em si, não é estritamente necessário para quem está iniciando com o paradigma funcional, porém, na medida em que se buscam soluções mais robustas, sem que para isto haja perda de simplicidade, faz-se necessário cada vez mais o conhecimento e a familiaridade com estes conceitos para que se possa tirar um melhor proveito da linguagem e paradigma com o qual se está desenvolvendo.

Links úteis

http://en.wikipedia.org/wiki/Functioncomposition(computer_science)

http://www.slideshare.net/calewis/jax-func-4557288

http://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads

http://aeflash.com/2013-06/monads.html

http://www.codecommit.com/blog/ruby/monads-are-not-metaphors

comments powered by Disqus