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

Postagens mais visitadas