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

O melhor de type hints—TDC BH Online

O melhor de type hints—TDC BH Online

Introdução à sintaxe e significado das anotações de tipo a partir de Python 3.5

Luciano Ramalho

April 25, 2020
Tweet

More Decks by Luciano Ramalho

Other Decks in Programming

Transcript

  1. S ã o o p c i o n a

    i s ! O MELHOR DE TYPE HINTS Introdução à sintaxe de type hints
 e o módulo typing do Python ≥ 3.5 Luciano Ramalho @ramalhoorg
  2. SINTAXE PARA DECLARAÇÃO ESTÁTICA DE TIPOS Formalizada no PEP 484

    — Type Hints Implementada a partir de Python 3.5 3 def parse_flag(text: str) -> bool: return text.upper() in {'Y', 'YES', 'T', 'TRUE'}
  3. TIPAGEM: DINÂMICA, ESTÁTICA, OU GRADUAL 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, Elm, etc.
 Tipagem gradual: declaração de tipos opcional, verificação na compilação ou por type checkers, normalmente sem efeito na execução Ex. ActionScript, Hack, Dart, TypeScript, etc. 4
  4. O PROBLEMA
 DAS 8 RAINHAS Um problema clássico usado por

    Dijkstra para ilustrar backtracking 6
  5. 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 7
  6. 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/ 13
  7. FUTURO PRÓXIMO: MELHORIAS NA USABILIDADE PEP 585 — Type Hinting

    Generics In Standard Collections A partir de Python 3.9 (backport para 3.7 e 3.8) 
 20 from __future__ import annotations def loads(input: Union[str, bytes], *, encoding: Optional[str] = None) -> dict[str, Any]: ...
  8. 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) É opcional: filosofia gradual typing 27
  9. ENXURRADA DE PEPS 30 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
  10. 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 31
  11. 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 32
  12. PYTHON VAI VIRAR UMA LINGUAGEM DE TIPOS ESTÁTICOS? Não. Na

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

    princípio, nenhum. O interpretador e a biblioteca padrão desconsideram as anotações de tipos* Diz a PEP 484: 35 * há duas exceções no módulo dataclasses
  14. TODO MUNDO DEVE USAR TYPE HINTS? Não. As pessoas que

    usam Python são muito diversas: engenheiras, analistas financeiros, estudantes, cientistas e especialistas das mais diversas áreas (física, biologia, sociologia, inteligência artificial). A análise de custo x benefício não é igual para todos esses grupos. Para aprender a programar ou fazer programação exploratória, as anotações de tipo introduzem complexidade, reduzem a flexibilidade do código, e não trazem grande valor. Type hints é mais útil em times de desenvolvedoras profissionais, com bases de código grandes, acostumadas com um ferramental mais complexo (IDEs, linters, testes automatizados, integração continua etc.) 36