Programação Funcional
Introdução a Programação Funcional
Programação Funcional (PF), é um paradigma de programção que utiliza funções puras, com a sua base no calculo lambda "λ", e é um paradigma declarativo, assim, evita a mutabilidade e efeitos colaterais. Isto permite que projetos, por mais complexos que sejam, tenha funções que, pela imutabilidade, operem da mesma forma inumeras vezes.
Linguagens Associadas
Entre as mais populares pela comunidade para o uso em PF, se encontram: Haskell, Lean, Elixir, Lisp, F# e OCaml.
Criação e Evolução
Sua origem vem desde o desenvolvimento do calculo lambda "λ", no começo do seculo 20, ao qual seus conceitos se tornaram pilares para a PF e serviram como base para outros paradigmas que viriam a seguir.
Lisp foi uma das primeiras linguagens a trazer a PF a tona, isto em uma epoca onde a capacidade de memoria era limitada e custosa para usar completamente todo o potencial deste paradigma.
Atualmente, devido aos avanços atuais da tecnologia, é um paradigma que tem um uso comercial massivo em areas especificas, como banco de dados e machine learning.
Princípios Fundamentais
Diferente de paradigmas como no caso da POO( Programação Orientada a Objetos), que necessita de um passo a passo de instruções para que seja executado o que se pede, é utilizado a programação declarativa, isto é, será dito o objetivo final de o que se deve chegar.
A imutabilidade, como citado anteriormente, pode ser resumida em "o que foi definido, não poderá ser alterado" isso permite o uso eficiente de multiplas tarefas ao mesmo tempo, chamado de "paralelismo".
Exemplos Práticos
Um exemplo de função que remove elementos repetidos em Haskell:
norepeat :: (Eq a) => [a] -> [a]
norepeat [] = []
norepeat (x:[]) = [x]
norepeat (x:y:xs) = if x == y then norepeat (x:xs) else x:(norepeat (y:xs))
*Main> norepeat [1,1,2,5,5,6]
[1,2,5,6]
*Main> norepeat [1,1,2,5,5,6, 6]
[1,2,5,6]
*Main> norepeat [1,2,5,5,6, 6]
[1,2,5,6]
*Main> norepeat [1,2,5]
[1,2,5]
*Main>
Vantagens e Desvantagens
Vantagens podemos citar a facilidade para criar e manusear codigos complexos, também tem o fato de poder criar um codigo mais legivel, abstrato e que aguenta uma alta capacidade de recebimento de dados.
Em desvantagens se pode notar a dificuldade de curva de aprendizado, a imutalibidade também limita alguns usos que seriam necessarios usando variaveis comuns, ao inves de variaveis constantes.
Casos de Uso
Na industria de software, podemos citar, devido a facilidade com o manuseamento de alto numero de dados, o uso crescente em machine learning e banco de dados, além de ser fundamentalmente utilizado para calculos matematicos.
Bibliografia:
CHAMBERS, John M. Object-oriented programming, functional programming and R. Statistical Science 29(2), 167-180, 2014. Disponível em: https://doi.org/10.1214/13-STS452 . Acesso em: 8 fev.2025
CHIUSANO, Paul; BJARNASON, Rúnar. Functional Programming in Scala. Nova Iorque: Manning, 2014. 322 p

Comentários
Postar um comentário