Conceitos, Programação, Programação Funcional

Começando com Programação Funcional.

Tempo de leitura: 3 min
lambda symbol

Programação funcional é um paradigma de programação baseado em funções matemáticas que presa por imutabilidade de dados e de estados.

Do contrário do que muita gente pensa, programação funcional NÃO é o oposto de orientação a objetos, você pode tranquilamente aplicar os conceitos PF/FP(programação funcional) enquanto você está trabalhando com orientação a objetos.

Como citei acima, em PF/FP a imutabilidade dos dados é o ponto chave, pois o que você quer é, sempre que executar uma função ela te retorne o mesmo valor.

Quando se pensa em programação funcional você deve começar a pensar em funções sem efeitos colaterais ou para simplificar funções puras(vamos tratar melhor disso mais à frente).

Outra das características da PF/FP é que as funções são tratadas como valores de primeira importância ou seja, as funções podem ser passadas como parâmetro de outras funções ou valores de uma variável por exemplo.

Neste artigo vou abordar um pouco de cada item abaixo:

1. Historia

A princípio a história da programação funcional tem inicio na década de 1930. Nesta década Alonso Church desenvolveu o cálculo ‘Lambda’, que nada mais é do que uma forma matemática de representar a computação.

No ano de 1950 John McCarthy criou a linguagem de programação Lisp baseada em Lambda.

Logo em 1970 Robin Milner desenvolveu a primeira linguagem de programação funcional com inferência de tipos e polimorfismo.

E finalmente em 1980 depois do surgimento da teoria lazy evaluationcomeçou o desenvolvimento da linguagem de programação Haskell, uma linguagem de programação lazy e open source.

2. Cálculo Lambda

Também escrito como cálculo-λ, o calculo lambda é um sistema formal pra representar computações baseado na definição e aplicação de funções e nele:

Todas as funcoes sao anonimas

Todas as funções objetos de ordem elevada, ou seja, podem ser passadas como argumentos e retornadas como funções.

Permite a combinação de operadores e funções básicas na geração de operadores mais complexos;

Pode ser tipada ou não

vou deixar um link bem mastigado sobre o que é o cálculo lambda;

3.Funções Puras e Impuras

Sempre que falamos de funções puras, queremos falar de funções que não vão gerar efeitos colaterais em nosso programa, é uma função que se o dado de entrada for sempre o mesmo, ela retorna sempre o mesmo resultado.

Abaixo vou usar a função de soma para demonstrar a diferença entre função pura e inpura.

let result;

function SomaImpura(a,b){
   result = a + b;
}
SomaImpura(1,3);
console.log(result)//imprime 4;

function SomaPura(a,b){
  return a + b
}
console.log(SomaPura(1,3))//imprime = 4;

como podemos ver, as duas funções fazem a mesma coisa, mas a diferença é clara entre as duas, o efeito colateral da função SomaImpura é a modificação da variável result. Esse conceito é simples e fácil de entender.

4.High-Order Functions

High-Order Functions são funções que recebem outras funções como parâmetro.

//Um exemplo de HOF extremamente simples.

function calcular(fn, a, b, c){
  return fn(a,b)*c;
}

function soma(a, b) {
   return a+b;
}

const calculo = calcular(soma, 1, 3, 4);

console.log(calculo)//imprime 16;

Essa prática de receber funções como parâmetros, é uma pratica muito comum em Javascript e Go, por exemplo, funções callbacks.

Conclusão

Bom, eu não sou um expert em programação funcional( muito longe mesmo disso), mas é uma coisa que desperta bastante meu interesse, e com certeza é uma coisa que eu vou continuar estudando.

Eu tentei nesse artigo passar algumas coisas que aprendi da maneira mais simples possível, se você manja mais que eu e acha que escrevi algo errado, deixe um comentário que eu concerto, o que eu quero aqui é apresentar como eu entendi os conceitos acima.

Para quem leu até aqui, muito obrigado e até a próxima.

Recomendo Leitura

Deixe um comentário

O seu endereço de e-mail não será publicado.