Programação funcional? O que diabos é isso?

A repercussão em relação a programação funcional tem sido muito intensa nos últimos meses, e tenho observado que muita gente pensa que isso é um conceito novo, que veio com a promessa de resolver os problemas que enfrentamos atualmente, principalmente em relação a performance e escalabilidade.

O paradigma funcional é baseado num modelo computacional bastante antigo, chamado cálculo-lambda que foi criado em 1930 por Alonzo Church, orientador de Allan Turing, e que futuramente serviu como base para a criação do LISP.

O paradigma funcional é baseado em aplicação de funções matemáticas e tem características marcantes como o conceito de imutabilidade e uso intenso de recursividade. Diferente das linguagens imperativas, que se baseiam na mudança de estado do programa uma linguagem funcional trabalha com estruturas que não são mutáveis, o resultado do programa é resultante da aplicação de uma função.

Em um programa imperativo, o desenvolvedor indica como o mesmo deve se comportar enquanto está em execução, já em um programa funcional, você determina um resultado a ser obtido, e a computação será feita de acordo com a melhor forma para obter tal resultado, o que vai acarretar em uma melhor performance.

Com programação funcional, se torna muito mais fácil trabalhar com aplicações matemáticas, programas que exigem resolução por recursividade, machine learning e inteligência artificial, tornando a resolução de diversos problemas bem mais simples que em uma linguagem imperativa.

Os exemplos de código a seguir mostram a facilidade que se tem pra escrever um programa recursivo em uma linguagem funcional, em comparação a uma linguagem imperativa.

exemplo em Python:

def fibonacci(n):
if n==1 or n==2:
return 1
return fibonacci(n-1)+fibonacci(n-2)
print fibonacci(5)

Exemplo em Haskell:

Fibonacci Int -> Int
Fibonacci 1 = 1
Fibonacci 2 = 1
Fibonacci n = Fibonacci(n-1) + Fibonacci(n-2)

Quais são as vantagens e desvantagens da programação funcional?

Se engana quem pensa que programação funcional está atrelada somente ao pensamento matemático, pois muitos problemas que enfrentamos no dia a dia podem ser resolvidos por uma linguagem desse tipo. Um exemplo é a de processamento em paralelo, que é um processo bastante complexo na maioria das linguagens imperativas.

O código de uma linguagem funcional tende a ser muito mais conciso, o que facilita manutenções e alterações futuras, além de ser muito mais fácil isolar uma função para debugs e análises.

O caminho para se pensar de forma funcional é muito mais complexo para alguém que já programou em linguagens imperativas, devido a grande diferença comportamental entre as duas, o que pode dificultar um pouco o processo de aprendizagem.

Com que linguagem posso começar?

Uma das minhas linguagens funcionais preferidas para isso é Haskell, que é uma linguagem que conheci há alguns anos, mas ultimamente tenho tido uma “queda” por Elixir, linguagem na qual já utilizei comercialmente, e que apresenta uma maior facilidade de desenvolvimento atrelada ao poder de Erlang, linguagem na qual elixir é baseada.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.