$30 off During Our Annual Pro Sale. View details »

Programação funcional que funciona

Programação funcional que funciona

Introdução a programação funcional e demonstrações práticas e reais de todos os conceitos em Ruby.

Por que FP (functional programming) importa?

Seus softwares terão menos bugs, serão mais rápidos de se desenvolver e mais fáceis de se manter.

Em outras palavras: +Dinheiro +Qualidade de vida +Sanidade.

Temas abordados:

1. Conceitos: Pure/Stateless functions, Composition, High order functions, Recursion, Referential transparency.

2. Ruby Functional Objects.

3. Como a comunidade Ruby já está sendo positivamente afetada.

Rodrigo Serradura

November 25, 2017
Tweet

More Decks by Rodrigo Serradura

Other Decks in Programming

Transcript

  1. programação funcional que funciona

  2. Talk is cheap. Show me the code. Linus Torvalds

  3. None
  4. https://github.com/serradura/request_via

  5. None
  6. + concorrente

  7. + concorrente + consumo de memória

  8. Um código melhor de: desenvolver, manter e evoluir.

  9. None
  10. Tudo que usa blocos poderá ser melhorado com o uso

    de funções (aka: lambdas). Ex: • Active Admin • Concurrent Ruby
  11. Objetivos

  12. Porque programação funcional se tornou relevante para mim e deveria

    se tornar relevante para você.
  13. Porque programação funcional é relevante para o ecossistema Ruby. Porque

    programação funcional se tornou relevante para mim e deveria se tornar relevante para você.
  14. Como se tornou relevante para mim?

  15. Resposta rápida:

  16. Resposta não tão rápida...

  17. if hurts, do it more often. Martin Fowler

  18. Junho / 2017

  19. Me coloquei à disposição para organizar o próximo Meetup 23/06.

    3 Hello Worlds em Elm. 22/06 Junho / 2017 Entrei para comunidade Elm via ElmBrasil no Telegram 20/06. Roadmap do Elm, como Evan Czaplicki prioriza os próximos. (Simplicidade) 24/06 Primeiros reflexos: Criei uma abstração compondo funções para gerenciar o ciclo de vida do JS no Turbolinks. 28/06.
  20. Junho / 2017 Me coloquei à disposição para organizar o

    próximo Meetup 20/06. 3 Hello Worlds em Elm. 22/06 Entrei para comunidade Elm via ElmBrasil no Telegram 20/06. Roadmap do Elm, como Evan Czaplicki prioriza os próximos. (Simplicidade) 24/06 Primeiros reflexos: Criei uma abstração compondo funções para gerenciar o ciclo de vida do JS no Turbolinks. 28/06.
  21. Me coloquei à disposição para organizar o próximo Meetup 23/06.

    3 Hello Worlds em Elm. 22/06 Entrei para comunidade Elm via ElmBrasil no Telegram 20/06. Roadmap do Elm, como Evan Czaplicki prioriza os próximos. (Simplicidade) 24/06 Primeiros reflexos: Criei uma abstração compondo funções para gerenciar o ciclo de vida do JS no Turbolinks. 28/06. Junho / 2017
  22. Julho / 2017

  23. Implementação do Strong Parameters (Ruby) numa abordagem funcional. 10/07. Julho

    / 2017
  24. Implementação do Strong Parameters (Ruby) numa abordagem funcional. 10/07. Julho

    / 2017
  25. Implementação do Strong Parameters (Ruby) numa abordagem funcional. 10/07. Julho

    / 2017
  26. Abordagem /Abstração reativa (FRP) para orquestrar um stream de eventos

    28/07. Julho / 2017 Implementação do Strong Parameters (Ruby) numa abordagem funcional. 10/07. Contribuição para vue-turbolinks com direito a variações! 20/07
  27. Abordagem /Abstração reativa (FRP) para orquestrar um stream de eventos

    28/07. Implementação do Strong Parameters (Ruby) numa abordagem funcional. 10/07. Contribuição para vue-turbolinks com direito a variações! 20/07 Julho / 2017
  28. Agosto / 2017

  29. Mandaram eu ler o Mostly Adequate Guide to Functional Programming

    08/08. Agosto / 2017 Criar o DOM via composição de funções no estilo Elm com jQuery e Ramda 23/08
  30. Mandaram eu ler o Mostly Adequate Guide to Functional Programming

    08/08. Agosto / 2017 Criar o DOM via composição de funções no estilo Elm com jQuery e Ramda 23/08
  31. Mandaram eu ler o Mostly Adequate Guide to Functional Programming

    08/08. Agosto / 2017 Criar o DOM via composição de funções no estilo Elm com jQuery e Ramda 23/08 Benchmark para comparar a performance do uso de Funções VS Métodos estáticos e de instância em Ruby 25/08. 2º ElmSP Pagar.me 28/08
  32. Mandaram eu ler o Mostly Adequate Guide to Functional Programming

    08/08. Agosto / 2017 Criar o DOM via composição de funções no estilo Elm com jQuery e Ramda 23/08 Benchmark para comparar a performance do uso de Funções VS Métodos estáticos e de instância em Ruby 25/08. 2º ElmSP Pagar.me 28/08 Operador de composição do Elm no Ruby 30/08.
  33. Mandaram eu ler o Mostly Adequate Guide to Functional Programming

    08/08. Agosto / 2017 Criar o DOM via composição de funções no estilo Elm com jQuery e Ramda 23/08 Benchmark para comparar a performance do uso de Funções VS Métodos estáticos e de instância em Ruby 25/08. 2º ElmSP Pagar.me 28/08 Operador de composição do Elm no Ruby 30/08.
  34. Setembro / 2017

  35. You might not need #reactjs, or #redux, follows an example

    of how you can do everything with @jquery and ES201*. 18/09. Setembro / 2017
  36. You might not need #reactjs, or #redux, follows an example

    of how you can do everything with @jquery and ES201*. 18/09. Setembro / 2017
  37. You might not need #reactjs, or #redux, follows an example

    of how you can do everything with @jquery and ES201*. 18/09. Setembro / 2017 @jodosha (criador do Hanami) publica os melhores slides sobre Functional Objects em Ruby que havia visto. 27/09 30LOC to implement a complete and extensible EventBus in a FP approach. 28/09 3º ElmSP TW 28/09
  38. You might not need #reactjs, or #redux, follows an example

    of how you can do everything with @jquery and ES201*. 18/09. Setembro / 2017 @jodosha (criador do Hanami) publica os melhores slides sobre Functional Objects em Ruby que havia visto. 27/09 30LOC to implement a complete and extensible EventBus in a FP approach. 28/09 3º ElmSP TW 28/09
  39. Outubro / 2017

  40. Video Luca Guidi - @jodosha Functional web with Ruby 09/10.

    Outubro / 2017 RequestVia 0.1.0: A Functional HTTP Client That Wraps Net::HTTP 30/10.
  41. Video Luca Guidi - @jodosha Functional web with Ruby 09/10.

    Outubro / 2017 RequestVia 0.1.0: A Functional HTTP Client That Wraps Net::HTTP 30/10.
  42. Novembro / 2017

  43. Novembro / 2017 Programação funcional - Hands on em diferentes

    tecnologias para manjar dos paranauê. 01/11.
  44. Novembro / 2017 Programação funcional - Hands on em diferentes

    tecnologias para manjar dos paranauê. 01/11. Unleash new amazing possibilities writing Ruby functional objects! 10/11.
  45. Novembro / 2017 Programação funcional - Hands on em diferentes

    tecnologias para manjar dos paranauê. 01/11. Unleash new amazing possibilities writing Ruby functional objects! 10/11.
  46. Novembro / 2017 Programação funcional - Hands on em diferentes

    tecnologias para manjar dos paranauê. 01/11. Unleash new amazing possibilities writing Ruby functional objects! 10/11.
  47. Novembro / 2017 Programação funcional - Hands on em diferentes

    tecnologias para manjar dos paranauê. 01/11. Unleash new amazing possibilities writing Ruby functional objects! 10/11.
  48. Novembro / 2017 Programação funcional - Hands on em diferentes

    tecnologias para manjar dos paranauê. 01/11. Unleash new amazing possibilities writing Ruby functional objects! 10/11. When classes are verbs, they act like functions. compound expressions == combination of functions
  49. Novembro / 2017 Programação funcional - Hands on em diferentes

    tecnologias para manjar dos paranauê. 01/11. Unleash new amazing possibilities writing Ruby functional objects! 10/11. When classes are verbs, they act like functions. compound expressions == combination of functions
  50. Mindset funcional

  51. Business analysis

  52. Transformação Saída Entrada Definição formal de um processo

  53. Agile

  54. Funções???

  55. https://en.wikipedia.org/wiki/Function_(mathematics)

  56. None
  57. Princípios de programação funcional em Ruby.

  58. https://www.ruby-lang.org/en/about/#fn3

  59. None
  60. None
  61. Função de alta ordem High-order function

  62. None
  63. None
  64. Função como valores First class functions

  65. None
  66. Funções puras Pure/Stateless functions

  67. None
  68. Recursão

  69. None
  70. None
  71. Closures

  72. None
  73. Imutabilidade

  74. None
  75. None
  76. None
  77. None
  78. If all the methods are pure functions. The objects are

    data!
  79. None
  80. Functional First Development

  81. First, code everything you can without using any side effects.

    Then, code your side effects. Functional First Development
  82. http://dry-rb.org/

  83. None
  84. None
  85. None
  86. None
  87. kudos. @renanranelli @_rchaves_ @arthurxavierx

  88. @serradura

  89. Obrigado