ProgramaçãoFuncional: NovosHorizontespara a Expansão da Consciência<br />Andrei de Araújo Formiga<br />@andreiformiga<br />
Escolas de Magia<br /><ul><li>Abjuration
Transmutation
Conjuration
Divination
Enchantment
Evocation
Illusion
Necromancy</li></li></ul><li>Porque?<br />Novospontos de vista<br />Novasformas de fazermagia<br />
Escolas de Programação<br /><ul><li>ProgramaçãoImperativa
Máquinas de Turing</li></li></ul><li>Escolas de Programação<br /><ul><li>ProgramaçãoFuncional
Lambda-cálculo
Sistemas de reescrita</li></li></ul><li>ProgramaçãoImperativa<br /><ul><li>Efeitoscolateraissãovitais
Computação = alteraçõesno estado da memória</li></li></ul><li>Efeitos = Problemas<br /><ul><li>Variáveisglobais
“Global variables are evil”
Aliasing
Mais de umareferênciapara o mesmoobjeto
Problemático se o objetoémutável</li></li></ul><li>Efeitos = Dificuldades<br /><ul><li>Otimizações
Análisesestáticas
Segurança
Corretude
Compartilhamento e Concorrência</li></li></ul><li>SemEfeitos?<br />O mundomudaporcausa dos efeitos?<br />
Solução: ControlarEfeitos<br /><ul><li>OO: Encapsulamento
Passagem de Mensagens
Estado local nãocompartilhado</li></li></ul><li>ProgramaçãoFuncional<br /><ul><li>Funçõescomoconceitobásico
Cidadãos de 1aclasse
Efeitoscolateraiscontrolados
Diferentesníveis de controle</li></li></ul><li>Características<br /><ul><li>Funções de altaordem
Inferência de tipos
Pattern matching
Tipos de Dados Algébricos</li></li></ul><li>Características<br /><ul><li>Polimorfismo(genéricos)
Avaliaçãopreguiçosa (lazy)
Continuações
Mônadas e Sistemas de Efeitos</li></li></ul><li>Pesquisae Inovação<br /><ul><li>Tradição de Pesquisaemlinguagensfuncionais
Muitasinovaçõessurgiram 1onaslinguagensfuncionais
Fama de paradigma“acadêmico”</li></li></ul><li>Tiposfantasmas, mônadas, catamorfismos, anamorfismos, GADTs…<br />
Linguagens<br /><ul><li>Scheme
Próximos SlideShares
Carregando em…5
×

Programação Funcional: Novos Horizontes para a Expansão da Consciência

2.387 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
6 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.387
No SlideShare
0
A partir de incorporações
0
Número de incorporações
9
Ações
Compartilhamentos
0
Downloads
35
Comentários
0
Gostaram
6
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Programação Funcional: Novos Horizontes para a Expansão da Consciência

  1. 1. ProgramaçãoFuncional: NovosHorizontespara a Expansão da Consciência<br />Andrei de Araújo Formiga<br />@andreiformiga<br />
  2. 2.
  3. 3.
  4. 4. Escolas de Magia<br /><ul><li>Abjuration
  5. 5. Transmutation
  6. 6. Conjuration
  7. 7. Divination
  8. 8. Enchantment
  9. 9. Evocation
  10. 10. Illusion
  11. 11. Necromancy</li></li></ul><li>Porque?<br />Novospontos de vista<br />Novasformas de fazermagia<br />
  12. 12.
  13. 13. Escolas de Programação<br /><ul><li>ProgramaçãoImperativa
  14. 14. Máquinas de Turing</li></li></ul><li>Escolas de Programação<br /><ul><li>ProgramaçãoFuncional
  15. 15. Lambda-cálculo
  16. 16. Sistemas de reescrita</li></li></ul><li>ProgramaçãoImperativa<br /><ul><li>Efeitoscolateraissãovitais
  17. 17. Computação = alteraçõesno estado da memória</li></li></ul><li>Efeitos = Problemas<br /><ul><li>Variáveisglobais
  18. 18. “Global variables are evil”
  19. 19. Aliasing
  20. 20. Mais de umareferênciapara o mesmoobjeto
  21. 21. Problemático se o objetoémutável</li></li></ul><li>Efeitos = Dificuldades<br /><ul><li>Otimizações
  22. 22. Análisesestáticas
  23. 23. Segurança
  24. 24. Corretude
  25. 25. Compartilhamento e Concorrência</li></li></ul><li>SemEfeitos?<br />O mundomudaporcausa dos efeitos?<br />
  26. 26. Solução: ControlarEfeitos<br /><ul><li>OO: Encapsulamento
  27. 27. Passagem de Mensagens
  28. 28. Estado local nãocompartilhado</li></li></ul><li>ProgramaçãoFuncional<br /><ul><li>Funçõescomoconceitobásico
  29. 29. Cidadãos de 1aclasse
  30. 30. Efeitoscolateraiscontrolados
  31. 31. Diferentesníveis de controle</li></li></ul><li>Características<br /><ul><li>Funções de altaordem
  32. 32. Inferência de tipos
  33. 33. Pattern matching
  34. 34. Tipos de Dados Algébricos</li></li></ul><li>Características<br /><ul><li>Polimorfismo(genéricos)
  35. 35. Avaliaçãopreguiçosa (lazy)
  36. 36. Continuações
  37. 37. Mônadas e Sistemas de Efeitos</li></li></ul><li>Pesquisae Inovação<br /><ul><li>Tradição de Pesquisaemlinguagensfuncionais
  38. 38. Muitasinovaçõessurgiram 1onaslinguagensfuncionais
  39. 39. Fama de paradigma“acadêmico”</li></li></ul><li>Tiposfantasmas, mônadas, catamorfismos, anamorfismos, GADTs…<br />
  40. 40.
  41. 41. Linguagens<br /><ul><li>Scheme
  42. 42. Standard ML / OCaml / F#
  43. 43. Haskell
  44. 44. Scala
  45. 45. Erlang
  46. 46. Clojure</li></li></ul><li>SeráJavaScriptumaLinguagemFuncional?<br />
  47. 47. “JavaScript is the first lambda language to go mainstream” <br />JavaScript: The Good Parts, Douglas Crockford<br />
  48. 48. Funções de Alta Ordem<br /><ul><li>Funçõesqueusamfunções
  49. 49. Funções de 1aclasse
  50. 50. JavaScript tem isso</li></li></ul><li>Funçõesem JS<br /><ul><li>Funçõesanônimas e closures
  51. 51. Callbacks e Eventos
  52. 52. HOFs tradicionais</li></li></ul><li>Funçõesem JS<br />function filter(pred, a) {<br />varres = [];<br />for (iin a) {<br />if (pred(a[i])) <br />res.push(a[i]);<br />}<br />return res;<br />}<br />filter(function (x) { return x > 5 }, <br /> [4, 5, 10, 8, 12, 2, 1, 9])<br />> [10, 8, 12, 9]<br />
  53. 53. Funçõesem JS<br />function reduce(f, a, i)<br />{<br />varres = i;<br />for (iin a)<br /> res = f(res, a[i]);<br />return res;<br />}<br />reduce(function (s, x) { return s + x }, <br /> [4, 5, 10, 8, 12, 2, 1, 9], 0)<br />> 51<br />
  54. 54. Disponívelem um JavaScript próximo de você<br />vara = [4, 5, 10, 8, 12, 2, 1, 9];<br />a.filter(function (x) { return x > 5 })<br />> [10, 8, 12, 9]<br />a.reduce(function (s, x) { returns+x })<br />> 51<br />
  55. 55. Anamorfismo = reduce<br />
  56. 56. Mônadas<br /><ul><li>Um construtor + 2 funções/métodos
  57. 57. return
  58. 58. bind
  59. 59. Monad laws</li></li></ul><li>MônadassãoPadrões<br /><ul><li>Coleções
  60. 60. Quebrar + processar + retornar</li></li></ul><li>Mônadasem JS<br />function Cookie(val) {<br /> // armazena dado em um cookie<br />}<br />varv1 = cookie1.get()<br />varv2 = morfar(v1)<br />varcookie2 = newCookie(v2)<br />
  61. 61. Mônadasem JS<br />functionCookie(val) {<br /> // armazena dado em um cookie<br />}<br />Cookie.prototype.ret = function (v) {<br />returnnew Cookie(v);<br />}<br />Cookie.prototype.bind = function(f) {<br />returnnew Cookie( f(this.get()) );<br />}<br />
  62. 62. Mônadasem JS<br />var cookie2 = cookie1.bind(morfar)<br />
  63. 63. MônadascontrolamEfeitos<br />Haskell: efeitossópodemacontecerdentro de mônadas<br />
  64. 64. MônadascontrolamEfeitos<br />Experiência: maior parte do códigonãoprecisa de efeitos<br />
  65. 65. Efeitos e Concorrência<br />Se nãoháefeitoscompartilhados, paralelizarétrivial.<br />
  66. 66. “once you get the hang of it, functional programming is really fun”<br />JavaScript: The Good Parts, Douglas Crockford<br />
  67. 67. Para AprenderMais<br />mitpress.mit.edu/sicp<br />
  68. 68. Para AprenderMais<br />htdp.org<br />
  69. 69. Para AprenderMais<br />The Functional<br />Approach to <br />Programming<br />
  70. 70. Obrigado!<br />@andreiformiga<br />

×