Funções de ordem maior e Composição de funções

Fala dev!!!
Estamos de volta com a nossa série sobre a programação funcional, já falamos aqui sobre Imutabilidade e funções puras/impuras, desta vez iremos falar sobre Funções de ordem maior (Higher-order-function) e Composições de funções.

Na programação funcional uma função é caracterizada como cidadãs de primeira classe (Fisrt-Class-Citizem). Isso significa que as funções podem ser tratadas como valores, serem passadas como parâmetros para outras funções e também serem retornados por outras funções.

Funções de ordem maior são as funções que recebem uma ou mais funções como parâmetros e pode retornar uma função. Estas funções são extremamente utilizadas na programação funcional. Funções de ordem maior são boas substitutas para loops: ao invés de utilizar um for-in, pode ser iterar sobre os elementos de uma lista, por exemplo com a função map. Observe o código abaixo:

No código acima temos uma simples função que recebe uma lista de string e realiza o reverse desta string. Observe que para interar esta lista utilizamos a função de ordem maior Enum.map, passamos como parâmetro uma função anônima e, realizando o reverse para cada elemento da lista.

Composição de Funções

A composição de funções é uma técnica de programação que pode ser muito útil e muito expressiva ao mesmo tempo.
Essencialmente, esta técnica consiste em combinar funções simples tornando a saída de uma função, o parâmetro de entrada para outra. Vale ressaltar que esta técnica permite a aplicabilidade do princípio da responsabilidade única, o S do SOLID, algo muito conhecido entre os devs.

No código acima temos um exemplo simples de composição de função no qual uma lista é passada como parâmetro para a função Enum.map/2. A saída desta função é passada como parâmetro para a função Enum.filter/2. E, o resultado disso é passado para a próxima, onde executa as modificações e passa a adiante até a saída da última função da composição.

Se você, assim como eu, estiver estudando programação funcional, já deve ter visto ou até mesmo implementado as técnicas citadas acima. Porém entender os conceitos destas técnicas é fundamental para podemos implementá-las de uma forma consciente e eficaz e, podendo até mesmo utilizar este tipo de técnica em linguagens não puramente funcionais.

Abraços pessoal, até a próxima…

--

--