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”
Hoje
Nuvem
Servidores distribuídos
Programação concorrente
E funcional funciona ?
• A programação funcional ficou por anos fechada
ao meio acadêmico devido a complexidade
• Mas a ca...
Por que funcional ?
• Por que isso agora ? Se já convivo tanto com a
orientação a objetos no JavaScript
• O JavaScript não...
Pedras no caminho
• A programação funcional vai parecer uma
loucura no começo pois estamos em nossa
maioria acostumados a ...
Um pouco de história
O que faz uma linguagem ser
funcional?
Funções == objeto
Imutabilidade
Recursividade
Lambda
Independência de estado
O que faz uma linguagem ser
funcional?
• Função é a menor parte de um programa
• Na programação funcional nos preocupamos
...
O que faz uma linguagem ser
funcional?
• A execução das expressões é controlada por
condições e recursividade e não iteraç...
Sobre o paradigma
• Funções não dependem do estado do sistema.
• Lambda: de maneira simples, é o conceito de
funções receb...
Vantagens
Modularidade
Menos sujeito a efeitos colaterais
Menor dependência entre
módulos
Vantagens
Reusabilidade
Programação concorrente
É matematicamente correto
O JavaScript é funcional ?
• Em parte, pois sua construção
permite a utilização tanto de
programação funcional quanto de
o...
Tipos de funções
Funções anônimas
• São simplesmente funções que não tem um
nome definido.
• Sua utilização é bem comum quando temos
apenas...
Funções anônimas
Funções auto invocáveis
• São funções que ao serem criadas já executam
• Mantem as suas variáveis com acesso apenas
intern...
Funções auto invocáveis
Closures
- Funções que possuem funções filhas que tem
acesso as variáveis do escopo da função pai
- Você pode salvar algum...
Clousures
Funções de primeira classe
- Funções mais simples que podem ser
representadas apenas com números.
- São atribuídas a uma v...
Funções de primeira classe
Funções de alta ordem
- Funções mais complexas onde pode haver
uma ou mais funções internas.
- Podem ter escopo compartilh...
Funções de alta ordem
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 ...
Funções puras
Funções puras
Algumas ferramentas
Callbacks
Map
Filter
Reduce
ForEach
Algumas ferramentas
• O JavaScript desde sua versão 5.1 de 2011,
ECMA-262 passou a implementar, map, filter,
reduce e forE...
Callbacks
• São funções passadas como parâmetro, para
que a função que recebeu o call-back a use
• Quem nunca usou uma cha...
Callback
Map
- Itera um Array executando uma função de call-
back sobre cada item do Array, retornando uma
lista nova, normalmente ...
Map
- O segundo parâmetro é utilizado para
especificar o valor para o escopo da função.
- O mais importante são os parâmet...
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 algum...
Filter
Reduce
- Itera um Array da mesma maneira que o map,
mas retorna a soma dos resultados da função
de call-back recebida.
- A...
Reduce
- O primeiro é novamente a função de callback,
que será chamada para cada elemento no
Array.
- O segundo parâmetro ...
Reduce
ForEach
• É uma versão não pura do .map(), que como
este recebe uma função de call-back como
parâmetro e para esta passa o...
ForEach
• Funciona basicamente como um for
Menos importante, mas mesmo assim
importantes
• Concat
• Reverse
• Sort
• Everey
• Some
• Flat
Manipulando funções
apply & call
• Os métodos call e apply são muito
semelhantes, ambos chamam uma função.
• Diferenciam-se pelos parâmetros r...
apply & call
apply & call
Biding
• É uma função que como o call, recebe this
como primeiro parâmetro e uma sequencia de
parâmetros.
• A grande difer...
Biding
Biding
Fábrica de funções
• São clousures que ajudam a organiza o
processo de funções que criam outras
funções.
Fábrica de funções
Partial application
• Partial application é o processo de vincular
um ou mais valores a um ou mais parâmetros
de uma funçã...
Partial application
Partial application
Partial application
Currying
- Em linhas gerais currying é o processo de
transformar uma função com muitos
argumentos em uma ou mais funções m...
Currying
Exemplos
/Deivis/Functional-Programming
Perguntas ?
Obrigado
Próximos SlideShares
Carregando em…5
×

Programacao funcional

358 visualizações

Publicada em

Uma breve introdução a programação funcional e a algumas funções disponíveis no javascript pra a programação funcional

Publicada em: Software
  • Seja o primeiro a comentar

Programacao funcional

  1. 1. Programação funcional E um pouco de JavaScript
  2. 2. Deivis C. Wingert /DeivisWingert /Deivis
  3. 3. “Programação funcional, assim como a orientação a objetos, é uma forma de se pensar em como resolver problemas”
  4. 4. Hoje Nuvem Servidores distribuídos Programação concorrente
  5. 5. E funcional funciona ? • A programação funcional ficou por anos fechada ao meio acadêmico devido a complexidade • Mas a cada dia isso vem mudando mais, as linguagens funcionais como Erlang, Clojure, Haskel, F# entre outras veem sendo cada vez mais utilizadas • Pode ser utilizada em linguagens multi-paradigma como Scala e JavaScript.
  6. 6. Por que funcional ? • Por que isso agora ? Se já convivo tanto com a orientação a objetos no JavaScript • O JavaScript não é nativamente orientado a objetos e nem puramente funcional
  7. 7. Pedras no caminho • A programação funcional vai parecer uma loucura no começo pois estamos em nossa maioria acostumados a trabalhar com a orientação a objetos. • Para se criar bons sistemas utilizando JavaScript sobre o paradigma funcional é necessária uma bela curva de aprendizado.
  8. 8. Um pouco de história
  9. 9. O que faz uma linguagem ser funcional? Funções == objeto Imutabilidade Recursividade Lambda Independência de estado
  10. 10. O que faz uma linguagem ser funcional? • 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.
  11. 11. O que faz uma linguagem ser funcional? • 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.
  12. 12. Sobre o paradigma • Funções não dependem do estado do sistema. • Lambda: de maneira simples, é o conceito de funções recebendo e retornando funções ou resultados das mesmas, conceito oriundo do cálculo Lambda do matemático Alonzo Church.
  13. 13. Vantagens Modularidade Menos sujeito a efeitos colaterais Menor dependência entre módulos
  14. 14. Vantagens Reusabilidade Programação concorrente É matematicamente correto
  15. 15. O JavaScript é funcional ? • Em parte, pois sua construção permite a utilização tanto de programação funcional quanto de orientação a objetos.
  16. 16. Tipos de funções
  17. 17. Funções anônimas • São simplesmente funções que não tem um nome definido. • Sua utilização é bem comum quando temos apenas uma chamada a esta determinada função ou quando a retornamos como parâmetro.
  18. 18. Funções anônimas
  19. 19. Funções auto invocáveis • São funções que ao serem criadas já executam • Mantem as suas variáveis com acesso apenas interno, isso inclui funções internas. • Para disponibilizar algum valor pode-se utilizar o return desta função
  20. 20. Funções auto invocáveis
  21. 21. 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. - Estão presentes em qualquer linguagem funcional.
  22. 22. Clousures
  23. 23. 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
  24. 24. Funções de primeira classe
  25. 25. 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
  26. 26. Funções de alta ordem
  27. 27. Funções puras
  28. 28. 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
  29. 29. Funções puras
  30. 30. Funções puras
  31. 31. Algumas ferramentas Callbacks Map Filter Reduce ForEach
  32. 32. Algumas ferramentas • O JavaScript desde sua versão 5.1 de 2011, ECMA-262 passou a implementar, map, filter, reduce e forEach como protótipos de array
  33. 33. Callbacks • São funções passadas como parâmetro, para que a função que recebeu o call-back a use • Quem nunca usou uma chamada de Ajax da jQuery ?
  34. 34. Callback
  35. 35. 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. - E o segundo é opcional, é o valor a ser utilizado como o this no momento da execução da função callback.
  36. 36. Map - 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)
  37. 37. Map
  38. 38. 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.
  39. 39. Filter
  40. 40. 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. A função de call-back e o argumento opcional para o this.
  41. 41. Reduce - 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
  42. 42. Reduce
  43. 43. ForEach • É uma versão não pura do .map(), que como este recebe uma função de call-back como parâmetro e para esta passa o item corrente, índice e uma referencia ao próprio array. • Mas diferentemente do map, o forEach não tem um retorno.
  44. 44. ForEach • Funciona basicamente como um for
  45. 45. Menos importante, mas mesmo assim importantes • Concat • Reverse • Sort • Everey • Some • Flat
  46. 46. Manipulando funções
  47. 47. apply & call • Os métodos call e apply são muito semelhantes, ambos chamam uma função. • Diferenciam-se pelos parâmetros recebidos • Por padrão possuem uma variável interna chamada arguments que recebe os parâmetros passados além do this.
  48. 48. apply & call
  49. 49. apply & call
  50. 50. Biding • É uma função que como o call, recebe this como primeiro parâmetro e uma sequencia de parâmetros. • A grande diferença é que o bind retorna uma nova função e não o resultado da chamada como call e apply
  51. 51. Biding
  52. 52. Biding
  53. 53. Fábrica de funções • São clousures que ajudam a organiza o processo de funções que criam outras funções.
  54. 54. Fábrica de funções
  55. 55. Partial application • Partial application é o processo de vincular um ou mais valores a um ou mais parâmetros de uma função que retorna outra função que irá aceitar os valores que não foram vinculados ainda. • Uma maneira bonita de criar funções que recebem parâmetros opcionais
  56. 56. Partial application
  57. 57. Partial application
  58. 58. Partial application
  59. 59. Currying - Em linhas gerais currying é o processo de transformar uma função com muitos argumentos em uma ou mais funções menores e mais simples. - Não afeta a função simplificada
  60. 60. Currying
  61. 61. Exemplos /Deivis/Functional-Programming
  62. 62. Perguntas ? Obrigado

×