Aqui você irá encontrar alguns códigos feitos durante as aulas da disciplina de Programação Funcional, que cursei durante a graduação em Ciência da Computação na Universidade Federal de Campina Grande.
A Programação Funcional é um paradigma de Liguagem de Programação. O paradigma funcional é baseado no modelo computacional de Cálculo Lambda, criado em 1930 por Alonzo Church (orientador do famoso matemático Allan Turing) e serviu como base para a criação do LISP – uma família de linguagens de programação desenvolvida por John McCarthy em 1958.
Diferentemente das programações imperativa e orientada a objetos, a funcional parte do princípio de que tudo são funções. Não existe uma lista de instruções ou objetos para o computador realizar, mas uma sequência de funções matemáticas que, juntas, vão resolver um problema.
Isso significa que, no paradigma funcional, você tem uma função, coloca um dado de entrada, aplica várias operações e obtém uma saída. É possível alterar as operações e, consequentemente, a saída, mas a entrada sempre permanecerá a mesma.
Além disso, no paradigma funcional não existem variáveis, mas constantes. Isso se traduz em códigos mais objetivos com constantes que, de forma geral, não mudam.
O código em programação funcional tende a ser mais curto e objetivo, além de facilitar a manutenção do código e eventuais mudanças. É mais simples adicionar testes e isolar uma função para fazer análises e corrigir falhas.
Outra vantagem é que, por ser baseado em funções matemáticas, o paradigma funcional induz o uso do conceito de imutabilidade, sempre que utilizarmos o mesmo valor para determinada função, ela retornará um resultado igual, imutável.
Por induzirem a imutabilidade, os programas desenvolvidos com linguagens funcionais são previsíveis, desse modo, se tornam mais fáceis de serem testados.
O uso de programação funcional ajuda a evitar side effects, uma vez que o que temos são apenas entradas e saídas geradas pela função, não exite modificação da entrada.
Side Effects é quando qualquer coisa além de prover um retorno é feito, como imprimir na tela ou editar uma variável global. Qualquer coisa que afete o mundo ao redor.
Por isso, as linguagens funcionais são mais amigáveis para a implementação de computação paralela – ou seja, diferentes pedaços do sistema rodam sem problemas em processadores diferentes. Isso se explica pelo fato de serem códigos previsíveis e sem efeitos colaterais.
No lugar de estruturas de repetição para iterar sobre listas, é recomendado o uso de funções como MAP e Reduce. Alguns exemplos de linguagens funcionais são Clojure, Haskell e Elixir.
Espero que goste do que irá encontrar aqui. Que possa te ajudar a mudar seu jeito de pensar soluções como mudou o meu. 💜