O melhor de type hints: são opcionais

O melhor de type hints: são opcionais

Primeiras impressões e experimentos com type hints e o módulo typing do Python ≥ 3.5

27c093d0834208f4712faaaec38c2c5c?s=128

Luciano Ramalho

July 20, 2019
Tweet

Transcript

  1. É o p c i o n a l !

    O MELHOR DE TYPE HINTS Primeiras impressões com a sintaxe de type hints
 e o módulo typing do Python ≥ 3.5 Luciano Ramalho @ramalhoorg
  2. TYPE HINTS? Que novidade é essa? 2

  3. SINTAXE PARA DECLARAÇÃO ESTÁTICA DE TIPOS Formalizada no PEP 484

    — Type Hints* Implementada a partir de Python 3.5 
 * ainda provisional em 19/jul/2019: "interface may change" 3 def parse_flag(text: str) -> bool: return text.upper() in {'Y', 'YES', 'T', 'TRUE'}
  4. TIPAGEM DINÂMICA X ESTÁTICA Tipagem dinâmica: verificação de tipos somente

    na execução Ex. Lisp, Smalltalk, Python, JavaScript, Ruby, Clojure, Elixir, etc. Tipagem estática: declaração de tipos no código-fonte, verificação na compilação Ex. C, C++, Pascal, Java, C#, Haskell, Rust, Kotlin, Swift, etc. Tipagem gradual: declaração de tipos opcional, verificação na compilação, normalmente sem efeito na execução Ex. Dart, TypeScript, etc. 4
  5. MELHORIAS NA USABILIDADE PEP 585 — Type Hinting Usability Conventions*

    A partir de Python 3.8 
 * ainda draft em 19/jul/2019 5 from __future__ import annotations def loads(input: Union[str, bytes], *, encoding: Optional[str] = None) -> dict[str, Any]: ...
  6. 6 O PROBLEMA
 DAS 8 RAINHAS

  7. O PROBLEMA
 DAS 8 RAINHAS Um problema clássico usado por

    Dijkstra para ilustrar backtracking 7
  8. 8 RAINHAS: SOLUÇÃO ORIENTADA A OBJETOS Pythonic Objects: Idiomatic OOP

    in Python na PyCon US 2019 https://www.youtube.com/watch?v=mUu_4k6a5-I 8
  9. 8 RAINHAS: DEMONSTRAÇÃO 9

  10. 8 RAINHAS: DEMONSTRAÇÃO 10

  11. 8 RAINHAS: DEMONSTRAÇÃO 11

  12. 8 RAINHAS: DEMONSTRAÇÃO 12

  13. 16 RAINHAS 13

  14. 8 RAINHAS: SOLUÇÃO ORIENTADA A OBJETOS Escrito em Python a

    partir dos exemplos em Smalltalk e Ruby do capítulo 6 de An Introduction to Object-Oriented Programming 3 ed, de Tim Budd. https://github.com/ramalho/pyob/ 14
  15. MYPY INDICA ONDE ESTÁ O ERRO 15

  16. CÓDIGO CONSERTADO random_queens_and_guard.py: https://tgo.li/rnd_queens 16

  17. INTERPRETADORES Meus primeiros exemplos com anotações de tipo 17

  18. INTERPRETADOR SUBPASCAL Exemplo da Oficina de Linguagens de Programação
 no

    Garoa Hacker Clube https://tgo.li/OfLiPr2018 18
  19. INTERPRETADOR SUBPASCAL: PARSER 19

  20. DATA CLASSES PEP 557, Python 3.7 20

  21. NAMED TUPLE (SEM TIPOS) 21

  22. NAMED TUPLE (COM TIPOS) 22

  23. DATA CLASS COM 2 CAMPOS 23

  24. DATA CLASS COM 8 CAMPOS 24

  25. BENEFÍCIOS 25

  26. VANTAGENS DE TIPAGEM ESTÁTICA Documentar a assinatura das funções Auxiliar

    a IDE, inclusive com refatorações automáticas Identificar bugs antes de rodar o programa Facilitar serialização de objetos (dica do Bruno Rocha) 26
  27. CUSTO Não existe almoço de graça 27

  28. DAVID BEAZLEY NÃO ESTÁ CURTINDO... https://twitter.com/dabeaz/status/981699763996450817 28

  29. ENXURRADA DE PEPS 29 Ano PEP Título Python 2006 3107

    Function Annotations 3.0 2014 484 Type Hints 3.5P 483 The Theory of Type Hints N/A 2015 482 Literature Overview for Type Hints N/A 2016 526 Syntax for Variable Annotations 3.6 2017 544 Protocols: Structural subtyping (static duck typing) 3.8 557 Data Classes 3.7 560 Core support for typing module and generic types 3.7 561 Distributing and Packaging Type Information 3.7 563 Postponed Evaluation of Annotations 3.7 2018 586 Literal Types 3.8 2019 585 Type Hinting Usability Conventions 3.8D 589 TypedDict: Type Hints for Dicts with a Fixed Set of Keys 3.8 591 Adding a final qualifier to typing 3.8 3.8
  30. DESVANTAGENS Esforço para aprender uma nova série de abstrações Generics,

    covariância, contravariância, tipagem estrutural, etc.
 Tempo para escrever anotações de tipo Às vezes é complicado exprimir o que precisamos
 Melhor suportado nas versões mais recentes de Python Python 3.8: avanços importantes de usabilidade e expressividade
 Aumento do tempo de inicialização do programa Relevante só para pequenos scripts, não para processos de longa duração 30
  31. CUSTO X BENEFÍCIO Os benefícios são maiores quando... O time

    ou a comunidade de desenvolvedoras é grande. O sistema é grande, complexo, e vai precisar evoluir muito. Bernat Gabor* dá uma boa regra:
 se você investe em testes, deve investir em type hints 
 * referência no final 31
  32. FAQ Respostas para algumas perguntas frequentes 32

  33. PYTHON VAI VIRAR UMA LINGUAGEM DE TIPOS ESTÁTICOS? Não. Na

    seção Non-goals da PEP 484 está escrito: 33
  34. QUAL O IMPACTO DAS ANOTAÇÕES NA EXECUÇÃO DO PROGRAMA? Em

    princípio, nenhum. A biblioteca padrão desconsidera as anotações de tipos* Diz a PEP 484: 34 * há duas exceções no módulo dataclasses
  35. REFERÊNCIAS Antes de ler todos aqueles PEPs... 35

  36. REFERÊNCIAS EM PORTUGUÊS Live de Python (sugestão do Eduardo Mendes

    @dunossauro) 36
  37. REAL PYTHON: PYTHON TYPE CHECKING GUIDE https://realpython.com/python-type-checking/ 37

  38. BERNAT GABOR: THE STATE OF TYPE HINTS IN PYTHON https://www.bernat.tech/the-state-of-type-hints-in-python/

    38
  39. Vamos continuar essa troca de ideias! Twitter: @ramalhoorg E-mail: lramalho@thoughtworks.com

    MUITO GRATO