6. • Compreensão do código com agilidade
• Validar as Idéias do desenvolvedor
• Minimizar a quantidade de informação processada
• Encontrar bugs atuais e futuros
Porque usar type hinting?
11. • Função que retorna qualquer coisa?
• Função que recebe uma lista de strings?
Dicionário?
• Função com valor default?
• Função que rece classA ou classB?
• Função que recebe uma classe?
Questões do Cotidiano
O Modulo typing tem a solução =)
12. from typing import Any
def func() -> Any:
…
Função que retorna qualquer
coisa?
13. Função que recebe uma lista de
strings?
from typing import List
def func(arg: List[str]) -> Any:
…
14. Função que recebe um dicionário?
from typing import Dict
def func(arg: Dict[str, str]) -> Any:
…
16. Função que int ou None?
from typing import Optional
def func(arg: int) -> Optional[int]:
…
17. Função que recebe mais de um
tipo?
from typing import Union
def func(arg: Union[clsA, clsB]) -> Any:
…
18. Função que retorna o mesmo tipo
que recebeu?
from typing import TypeVar
T = TypeVar(‘T’)
def func(arg: T) -> T:
…
19. Função que retorna o mesmo tipo
que recebeu?
from typing import List, TypeVar
T = TypeVar(‘T’)
def func(arg: List[T]) -> T:
…
20. Função que recebe uma classe e
não um objeto?
from typing import Type
def func(arg: Type[Model]) -> Model:
…
21. from typing import TYPE_CHECKING
if TYPE_CHECKING:
from foo import bar
def zorg() -> bar:
Dependências Circulares
22. • Quando uma variável recebe um valor o type checker
faz a inferencia do tipo:
• foo = ‘bar’ # reveal_type(foo) -> str
• foo = [1, 2, 3] # reveal_type(foo) -> List[int]
• foo = [] # error: need type annotation for variable
• foo: List[int] = [] # reveal_type(foo) -> List[int]
Type Inference
23. • Pode-se introduzir typing em uma base de código
existente
• O type checker irá levantar os erros nas funções
anotadas e também onde essas funções são
chamadas
Gradual Typing
24. 1) Anote as funções mais criticas/mais chamadas
primeiro
2) Habilitar o linter de arquivos cedo
3) Utilizar type checking com CI
4) Seja flexível com o que você recebe e estrito com
o que retorna
Gradual Typing
[SLIDE INSTRUCTIONS] Initial Slide: should be displayed until the presenter starts speaking (e.g. while presenter is introduced or before going on stage)
Always grab the latest version of this template from https://our.intern.facebook.com/intern/wiki/Infrastructure/FB_Infrastructure_Templates_and_Icons/
glwgoes @ linkedin/facebook/Instagram/geocites/orkut/myspace/bla bla
Agradecer Poline, Monalisa e Rodolfo
Python is awesome and is a dynamic language, why to I need to polute my code with hints? Is this Java?
Python é extremamente amigável e alguns dizem que é quase pseudo-código executável
Help! Ajuda a compreender o código que esta sendo escrito
O que são os items? O que process faz? Advinhação por contexto
Mais importante: compreensão
Code review
Ajuda no onboarding de membros ao time
Future proofing
docstrings
No to docstrings!
Docstrings podem ser perigosas, ficam desatualizadas com facilidade
Docsstrings são escritas por humanos e nunca validadas
Usar py3 -> já estamos em 2018, além de type hinting traz vários outros benefícios: menor uso de memória, asyncio, f strings, native type hinting
debugging simplificado
detectar erros antes da execução
O module typing tem a sua solução =)
Não abuse o any
Interessante para migração de code base
Uma lista ou qualquer outra collection pode conter um misto de tipos, não é muito comum na prática
Não absuar do optional!
Não é o caso de subclasses, essas são cobertas por herança
Generics!
Estes são os os casos mais comuns, mais detalhes podem ser encontrados na documentação
Se nós tivessemos que anotar todas as váriavéis isso seria massante, ao invés disso temos type inference
Não existe mágica, para uma lista em branco precisamos anotar a variável
Variable annotation requer py3.6, py3,5 is ugly: faz uso de comentários para o mesmo efeito
Mypy - full program analysis, way slower than just file checking
[SLIDE INSTRUCTIONS] Initial Slide: should be displayed until the presenter starts speaking (e.g. while presenter is introduced or before going on stage)
Always grab the latest version of this template from https://our.intern.facebook.com/intern/wiki/Infrastructure/FB_Infrastructure_Templates_and_Icons/