O documento discute os conceitos fundamentais da programação funcional, incluindo funções puras, imutabilidade, recursividade, map, filter e reduce. Apresenta exemplos de como essas técnicas podem ser usadas em JavaScript para melhor modularidade, reusabilidade e programação concorrente.
8. Sobre o paradigma
- Função é a menor parte de um programa
- Na programação funcional nos preocupamos
em dizer a maquina o que queremos fazer e
não como iremos fazer.
- A execução das expressões é controlada por
condições e recursividade e não iterações
diretas como ocorre nos paradigmas
imperativos.
9. Sobre o paradigma
- Variáveis e estados imutáveis.
- Funções não dependem do estado do sistema.
- Lambda: funções recebendo e retornando
funções ou resultados das mesmas
11. Funções de primeira classe
- Funções mais simples que podem ser
representadas apenas com números.
- São atribuídas a uma variável
- Não e não recebem parâmetros complexos
13. Funções de alta ordem
- Funções mais complexas onde pode haver
uma ou mais funções internas.
- Podem ter escopo compartilhado.
- Recebem funções e retornam funções
15. Closures
- Funções que possuem funções filhas que tem
acesso as variáveis do escopo da função pai
- Você pode salvar algum dado dentro de uma
função que é apenas acessível à função de
retorno , isto é, a função retornada mantém
seu ambiente de execução.
- Call-backs podem ser considerados clousures.
17. Currying
- Em linhas gerais currying é uma função com
argumentos simples que simplifica outra
função mais complexa.
- Não afeta a função simplificada
19. Funções puras
- Funções onde dado um ou mais parâmetros de
entrada a será a mesma para toas as vezes que
estes parâmetros forem recebidos.
- Não dependem de variáveis externas, recebem
dados e retornam dados.
- Não causa nem um tipo de efeito colateral
21. Funções mais comuns
• O JavaScript desde sua versão 5 de 2011,
ECMA-262 passou a implementar, map,
reduce e filter como protótipos de array
22. Map
- Itera um Array executando uma função de call-
back sobre cada item do Array, retornando uma
lista nova, normalmente modificada.
- A função map() recebe dois parâmetros , onde
primeiro parâmetro é uma função de call-back.
- O segundo parâmetro é utilizado para especificar
o valor para o escopo da função.
- O mais importante são os parâmetros passados
para a função de call-back, o elemento do Array
em si, o índice do Array, e todo o Array (contexto)
24. Filter
- Os parâmetros da função filter são exatamente
os mesmos da função map().
- E como o nome sugere ela filtra alguma coisa
em um array.
- O filtro é criado a partir da logica da função de
call-back passada como parâmetro.
26. Reduce
- Itera um Array da mesma maneira que o map,
mas retorna a soma dos resultados da função de
call-back recebida.
- Assim como map, reduce recebe dois
argumentos.
- O primeiro é novamente a função de callback, que
será chamada para cada elemento no Array.
- O segundo parâmetro é o initialValue que será
utilizado para somar ao próximo valor. Caso não
seja informado o primeiro valor do array é o
initialValue.
Um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis
A base do que hoje é a programação funcional foi criada paralelamente por Alan Turing e Alonzo Church, na década de 1930.
A primeira linguagem de programação funcional criada para computadores foi LISP, desenvolvida por John McCarthy no Instituto de Tecnologia de Massachusetts (MIT) no fim dos anos 1950.
Mas por um bom tempo este paradigma ficou fadado a ser apenas mais um tema acadêmico, por que ?
De maneira rápida, sucinta e meio criacionista alguns fatos que sobrepujaram as linguagens funcionais.
Computadores lentos e com pouca capacidade
A linguagem Assembly deu origem a C, C para C++ e OO, e C++ e OO levando para Java – todas as imperativas e rápidas para os padrões de hardware da época
O que levou o LISP e outras linguagens funcionais a serem deixadas de lado por sua lentidão.
Evolução brutal do hardware,
os computadores agora tem multiprocessadores sofisticados,
multi-core com terabytes de memória.
A internet e a computação na nuvem
Melhor modularidade
Menos sujeito a efeitos colaterais
Mais facilidade em resolver problemas de programação concorrente, devido a imutabilidade
Função é a menor parte de um programa
Na programação funcional nos preocupamos em dizer a maquina o que queremos fazer e não como iremos fazer.
A execução das expressões é controlada por condições e recursividade e não iterações diretas como ocorre nos paradigmas imperativos.
Variáveis e estados imutáveis.
Funções não dependem do estado do sistema.
Lambda: funções recebendo e retornando funções ou resultados das mesmas
Funções mais simples que podem ser representadas apenas com números.
São atribuídas a uma variável
Não e não recebem parâmetros complexos.
Funções mais complexas onde pode haver uma ou mais funções internas.
Podem ter escopo compartilhado.
Recebem funções e retornam funções
Funções que possuem funções filhas que tem acesso as variáveis do escopo da função pai
Você pode salvar algum dado dentro de uma função que é apenas acessível à função de retorno , isto é, a função retornada mantém seu ambiente de execução.
Call-backs podem ser considerados clousures.
Em linhas gerais currying é uma função com argumentos simples que simplifica outra função mais complexa.
Não afeta a função simplificada
Funções onde dado um ou mais parâmetros de entrada a será a mesma para toas as vezes que estes parâmetros forem recebidos.
Não dependem de variáveis externas, recebem dados e retornam dados.
Não causa nem um tipo de efeito colateral
O js desde sua versão 5 de 2011, ECMA-262 passou a implementar, map, reduce e filter como protótipos de array
Map.
Itera um Array executando uma função de call-back sobre cada item do Array, retornando uma lista nova, normalmente modificada.
A função map() recebe dois parâmetros , onde primeiro parâmetro é uma função de call-back.
O segundo parâmetro é utilizado para especificar o valor para o escopo da função.
O mais importante são os parâmetros passados para a função de call-back, o elemento do Array em si, o índice do Array, e todo o Array (contexto) .
Filter
Os parâmetros da função filter são exatamente os mesmos da função map().
E como o nome sugere ela filtra alguma coisa em um array.
O filtro é criado a partir da logica da função de call-back passada como parâmetro.
Reduce.
Itera um Array da mesma maneira que o map, mas retorna a soma dos resultados da função de call-back recebida.
Assim como map, reduce recebe dois argumentos.
O primeiro é novamente a função de callback, que será chamada para cada elemento no Array.
O segundo parâmetro é o initialValue que será utilizado para somar ao próximo valor. Caso não seja informado o primeiro valor do array é o initialValue.