SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Programação funcional
E um pouco de JavaScript
Deivis C. Wingert
/DeivisWingert
/Deivis
“Programação funcional, assim como a orientação a
objetos, é uma forma de se pensar em como resolver
problemas”
Um pouco de história
Hoje
Nuvem
Servidores distribuídos
Programação concorrente
Vantagens
Melhor modularidade
Menos sujeito a efeitos colaterais
Reusabilidade
Programação concorrente
Sobre o paradigma
Funções == objeto
Imutabilidade
Recursividade
Lamda
Independência de estado
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.
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
Funções de primeira classe
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
Funções de alta ordem
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
Clousures
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.
Currying
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
Funções puras
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
Funções mais comuns
Map
Reduce
Filter
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
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)
Map
• Referência: https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
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.
Filter
• Referência: https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
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.
Reduce
• Referência: https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
Exemplos
/Deivis/Functional-Programming
Perguntas ?
Obrigado

Mais conteúdo relacionado

Semelhante a Breve introdução a programação funcional com JavaScript

TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...tdc-globalcode
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcionalGabriel Schade Cardoso
 
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Programação Funcional - Luiz Stangarlin
Programação Funcional - Luiz StangarlinProgramação Funcional - Luiz Stangarlin
Programação Funcional - Luiz StangarlinDev PP
 
Aula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxAula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxItamarGoncalves2
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlex Camargo
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlex Camargo
 
Algoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docxAlgoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docxLdiaSilva39
 
Desenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosDesenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosVitor Silva
 
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Danival Calegari
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 

Semelhante a Breve introdução a programação funcional com JavaScript (20)

TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
 
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Programação Funcional - Luiz Stangarlin
Programação Funcional - Luiz StangarlinProgramação Funcional - Luiz Stangarlin
Programação Funcional - Luiz Stangarlin
 
Aula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxAula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptx
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
 
Algoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docxAlgoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docx
 
ADO.ppt
ADO.pptADO.ppt
ADO.ppt
 
Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1
 
SubProgramas
SubProgramasSubProgramas
SubProgramas
 
Aula07
Aula07Aula07
Aula07
 
Desenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosDesenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a Dados
 
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
 
Funções em C
Funções em CFunções em C
Funções em C
 
11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
es6
es6es6
es6
 
Es6
Es6Es6
Es6
 

Breve introdução a programação funcional com JavaScript

Notas do Editor

  1. 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
  2. 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.
  3. 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
  4. Melhor modularidade Menos sujeito a efeitos colaterais Mais facilidade em resolver problemas de programação concorrente, devido a imutabilidade
  5. 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
  6. 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.
  7. Funções mais complexas onde pode haver uma ou mais funções internas. Podem ter escopo compartilhado. Recebem funções e retornam funções
  8. 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.
  9. Em linhas gerais currying é uma função com argumentos simples que simplifica outra função mais complexa. Não afeta a função simplificada
  10. 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 
  11. 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.