Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Além dos Paradigmas (v.2)

Além dos Paradigmas (v.2)

Exemplos em Go e Python

Luciano Ramalho

May 11, 2018
Tweet

More Decks by Luciano Ramalho

Other Decks in Programming

Transcript

  1. E x e m p l o s e m

    G o e P y t h o n ALÉM DOS PARADIGMAS Entenda as características da linguagem e saiba escolher e adaptar padrões de projeto Luciano Ramalho @ramalhoorg
  2. FLUENT PYTHON, MEU 1º LIVRO Fluent Python (O’Reilly, 2015) Python

    Fluente (Novatec, 2015) Python к вершинам
 мастерства (DMK, 2015) 流暢的 Python (Gotop, 2016) also in Polish, Korean, etc… 3 4.7 stars at
 Amazon.com
  3. MDC EM PYTHON 11 Inadequado para Python que não faz

    otimização de chamada de cauda (TCO) Estilo imperativo Estilo funcional
  4. OUTRO LIVRO, OUTRA CLASSIFICAÇÃO Princípios de Linguagens de Programação
 (2003)

    Ana Cristina Vieira de Melo Flávio Soares Corrêa da Silva 15
  5. 16

  6. GOF: LIVRO CLÁSSICO DA “GANG OF FOUR” Design Patterns: Elements

    of Reusable Object-Oriented Software (1995) Erich Gamma
 Richard Helm
 Ralph Johnson
 John Vlissides 41
  7. PROBLEMAS NA DIFUSÃO DOS PADRÕES 43 Ralph Johnson no IME/USP

    (2014?) Excesso de ênfase nos padrões como resultados finais em vez de passos no processo de design
  8. PROBLEMAS NA DIFUSÃO DOS PADRÕES 44 Ralph Johnson no IME/USP

    (2014?) Conformidade com padrões não é uma medida de qualidade.
  9. NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph

    Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 45
  10. NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph

    Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 46 Nossos padrões assumem características no nível de Smalltalk/C++…
  11. NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph

    Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 47 Se tivéssemos assumido linguagens procedurais, talvez tivéssemos incluído padrões como “Herança”, “Encapsulamento" e “Polimorfismo".
  12. 48

  13. 49

  14. 50 Estudo do livro “Padrões de Projeto”: 16 dos 23

    padrões têm implementações qualitativamente mais simples em Lisp ou Dylan do que em C++, ao menos para alguns usos de cada padrão.
  15. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 53 Common Lisp C Java

    Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural
  16. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 54 Common Lisp C Java

    Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural Funções são objetos Classes são objetos
  17. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 55 Common Lisp C Java

    Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural
  18. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 56 Common Lisp C Java

    Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural
  19. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 57 Common Lisp C Java

    Go Python Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ∗ ✔ Modelo de variáveis referência valor* valor e referência valor* e referência referência Checagem de tipos dinâmica estática estática estática dinâmica Expressão de tipos estrutural nominal nominal estrutural estrutural
  20. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 58 Common Lisp C Java

    Go Python Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ∗ ✔ Modelo de variáveis referência valor* valor e referência valor* e referência referência Checagem de tipos dinâmica estática estática estática dinâmica Expressão de tipos estrutural nominal nominal estrutural estrutural
  21. INTERFACE X FUNÇÕES DE 1ª CLASSE Mas o pacote http

    suporta os dois estilos de programação*: 74 *Kumar Iyer (ThoughtWorks): Higher-order functions vs interfaces in golang http://bit.ly/2j39uKh
  22. QUAL É MAIS IDIOMÁTICA? Estratégia clássica parece muito verbosa em

    Python* Funções de 1ª classe são muito comuns na biblioteca padrão •Exemplo: argumento key nas funções embutidas sorted, max, min 80 * Sim, isto é subjetivo. Estamos falando de estilo!
  23. QUAL É MAIS IDIOMÁTICA COM PARÂMETROS? Use de closures é

    comum em Python •Python 3 ganhou a declaração nonlocal para suportar melhor essa prática Objetos invocáveis são característica típica de Python •Graham Dumpleton recomenda invocáveis para construir @decorators 81
  24. Para decidir se determinada implementação ou padrão faz sentido… AS

    CARACTERÍSTICAS DÃO A DICA A B C D E F G + ✔ ✔ ✔ ✔ + ✔ ✔ ✔ ✔ + ✔ ✔ ✔ ✔ ✔
  25. PORQUE APRENDER AS CARACTERÍSTICAS FUNDAMENTAIS Aprender novas linguagens mais rápido

    Aproveitar melhor as características de cada linguagem Escolher entre implementações alternativas Fazer bom uso de padrões de projeto Depurar problemas difíceis Emular características que fazem falta 86 Inspirado por Programming Language Pragmatics Michael L. Scott *