programação funcional na web com elixir e elmrhnonose.github.io/prog_funcional_web.pdf · elixir...
TRANSCRIPT
![Page 1: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/1.jpg)
Programação Funcional na Web com Elixir e Elm
![Page 2: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/2.jpg)
![Page 3: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/3.jpg)
Orientação a Objeto
• Objetos contém estado
• Um objeto pode mandar mensagens
• Um objeto pode receber mensagens
![Page 4: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/4.jpg)
Problemas OO
• Estado + Lógica no mesmo lugar
• Mutabilidade de estado em qualquer lugar do método dentro do objeto
• Mutabilidade de estado fora do objeto
• Acoplamento temporal
![Page 5: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/5.jpg)
Problemas OO
• Herança não cumpre a promessa de reusabilidade
• Passagem de objetos por referência quebra encapsulamento
![Page 6: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/6.jpg)
Padrões OOP• Singleton
• Factory
• Factory Method
• Abstract Factory
• Builder
• Prototype
• Adapter
• Decorator
• Bridge
• Proxy
![Page 7: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/7.jpg)
Programação Funcional
![Page 8: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/8.jpg)
Elm
![Page 9: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/9.jpg)
Elm
• Puramente funcional, estaticamente e fortemente tipada
• Expressiva, concisa e autodocumentada
• Imutabilidade e Transparência Referencial
![Page 10: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/10.jpg)
Elm
• Não existe null
• Não existe undefined function
• Interoperável com Javascript
• Versionamento Semântico Forçado
![Page 11: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/11.jpg)
Elm
![Page 12: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/12.jpg)
Elixir
![Page 13: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/13.jpg)
Elixir• Funcional, dinamicamente tipada
• Foco em escalabilidade e manutenibilidade
• Tolerante a falhas
• Extensível
• Compilada para a Erlang Virtual Machine (BEAM)
![Page 14: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/14.jpg)
Elixir
![Page 15: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/15.jpg)
Elixir
![Page 16: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/16.jpg)
Programação Funcional
• Funções Puras
• Recursão
• Funções de Primeira Classe
• Funções de Alta Ordem
![Page 17: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/17.jpg)
Funções Puras
![Page 18: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/18.jpg)
Javascript
![Page 19: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/19.jpg)
Elm
![Page 20: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/20.jpg)
Elixir
![Page 21: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/21.jpg)
Recursão
![Page 22: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/22.jpg)
Java
![Page 23: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/23.jpg)
Elm
![Page 24: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/24.jpg)
Elixir
![Page 25: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/25.jpg)
Lista Ligada
ff f
![Page 26: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/26.jpg)
Funções de Primeira Classe
![Page 27: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/27.jpg)
Elm
![Page 28: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/28.jpg)
Elixir
![Page 29: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/29.jpg)
Funções de Alta Ordem
![Page 30: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/30.jpg)
Java
![Page 31: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/31.jpg)
![Page 32: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/32.jpg)
Elixir
![Page 33: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/33.jpg)
Funções de Alta Ordem• Map
• Reduce
• Filter
• Find
• Split
![Page 34: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/34.jpg)
Java 8
![Page 35: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/35.jpg)
Aplicação parcial
![Page 36: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/36.jpg)
Piping
![Page 37: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/37.jpg)
Piping
![Page 38: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/38.jpg)
Pattern Matching
![Page 39: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/39.jpg)
Arquitetura Elm
![Page 40: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/40.jpg)
POO vs PF
• Mais abstrações
• Requer mais disciplina e treinamento
• Estado escondido e mutável
• Dependente de estado
• Menos abstrações
• Mais fácil de programar sem ter muita experiência
• Estado exposto e imutável
• Independente de estado
![Page 41: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/41.jpg)
![Page 42: Programação Funcional na Web com Elixir e Elmrhnonose.github.io/prog_funcional_web.pdf · Elixir • Funcional, dinamicamente tipada • Foco em escalabilidade e manutenibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042811/5fa67ebad645cf3fe37fc527/html5/thumbnails/42.jpg)
Obrigado!