programação funcional na web com elixir e elmrhnonose.github.io/prog_funcional_web.pdf · elixir...

42
Programação Funcional na Web com Elixir e Elm

Upload: others

Post on 10-Aug-2020

10 views

Category:

Documents


0 download

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

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
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
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

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

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

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

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

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

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

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

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

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
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

Obrigado!