O que é programação funcional
Contextualizando, Programação funcional é um paradigma de programação, ou seja uma forma de abordar a resolução de problemas no mundo da tecnologia, diferente de outros paradigmas como POO. Como o nome sugere, Programação funcional trata programação como funções matemáticas, visando evitar a criação de estados e dados mutáveis, promovendo a ideia de stateless
e immutable
.
Conceitos
Stateless e Immutable
Immutable
Significa que depois que um dado é criado ele nunca deverá ser alterado. Com isto evitamos retornos inesperados.
Stateless
Trata das funções que devem se comportar sem estado, isso significa que ela deve retornar algo como se fosse sua primeira chamada, tudo que rodou antes da função não deve ter nenhuma influência no seu retorno.
Regras / convenções
- Funções devem ser independentes.
- Sempre ter pelo menos um argumento: Isso ajuda a evitar dependências de estados globais.
- Funções sempre devem retornar algo.
- Dados, informações ou até outras funções: Isso promove a transparência e clareza nas operações. Não existem loops
- Loops devem ser criados através de recursividade: Isso favorece a imutabilidade e a clareza do código. Funções devem ser puras
- Não depender de nenhum dado externo: Isso garante que uma função produza o mesmo resultado para as mesmas entradas, facilitando o teste e a compreensão do código
Funções impuras
Funções impuras nem sempre retornam o valor esperado, isso acontece quando a função tem variáveis mutáveis, permitindo a mudança de estado. Que é o que por construção não acontece na programação funcional.
Um exemplo de função impura:
def remove_last_from_list(input):
input.pop()
names = ['Lucas', 'Tsugami', 'Rafa']
print(names) #Output: ['Lucas', 'Tsugami']
remove_last_from_list(names)
print(names) #Output: ['Lucas']
Diferenças de Imperativo e POO
Imperativo
No paradigma imperativo, a ideia está na execução de instruções que modificam o estado do programa ao longo da sua execução, com variáveis mutáveis por exemplo. A estrutura do código é baseado em procedimentos e funções, com ênfase em "como" as operações são realizadas, detalhando passos específicos a serem seguidos.
Programação orientada a Objetos(POO)
No POO a abordagem é centrada a objetos que encapsulam dados e comportamentos relacionados. Esses objetos interagem entre si, proporcionando uma organização modular do código.
Exemplos
Aqui vou usar Python para mostrar um exemplo de como é este paradigma na pratica. Vou usar um exemplo no paradigma Imperativo e um Funcional, visto que o POO pode ser 'aproveitado' e utilizado na programação funcional.
##Imperativo
number_list = [1,2,3,4,5,6]
sum_pairs = 0
for num in number_list:
if num %2 ==0:
square = num **2
sum_square += square
print(sum_square) #Output:56
Note que é necessário usar de um loop for
para percorrer a lista de números e conseguir o resultado. Ou seja, a cada iteração é gerado um novo estado.
##Funcinoal
number_list = [1,2,3,4,5,6]
sum_pairs = sum(map(lambda x: x**2, filter(lambda x: x % 2==0, number_list)))
print(sum_pairs) #Output: 56
Neste exemplo funcional utilizamos expressões map
, lambda
e filter
para criar uma lista de números pares e em seguida a função sum
para conseguir a soma total. Este exemplo é mais conciso e expressa uma operação de forma funcional, evitando estados mutáveis.
Vantagens da programação funcional
Suporte a debug e testes
A Programação Funcional proporciona um suporte melhor a debug e testes devido à imutabilidade e à pureza das funções. Isso facilita a identificação e correção de erros, tornando o desenvolvimento mais robusto.
Performance de código
A abordagem funcional contribui para a melhoria da performance do código em situações em que a imutabilidade e a ausência de efeitos colaterais são críticas. Isso é particularmente útil em sistemas que exigem alta confiabilidade e escalabilidade.
Expressividade e concisão
A programação funcional permite a expressão concisa de lógicas complexas, tornando o código mais legível e fácil de entender. Essa característica é valorizada em projetos que demandam manutenção a longo prazo e colaboração entre desenvolvedores.
Linguagens de programação funcionais.
Elixir
O maior diferencial do Elixir é o polimorfismo, permitindo a criação de funções com diferentes implementações para tipos distintos de dados.
Haskell
Haskell é uma linguagem funcional pura que se destaca pela forte tipagem, inferência de tipos e imutabilidade. Sua sintaxe concisa e expressiva é favorecida em ambientes acadêmicos e aplicações matemáticas.
Scala
Scala é uma linguagem híbrida, incorporando conceitos funcionais e orientados a objetos. Oferece flexibilidade na transição de códigos imperativos para funcionais, sendo amplamente utilizada em ambientes corporativos.
Top comments (0)