Slide 1

Slide 1 text

PEDRA ANGULAR DE TYPE HINTS Porquê typing.Protocol foi o
 acréscimo mais importante do
 sistema de tipos estáticos de Python P r o t o c o l o s 🦆

Slide 2

Slide 2 text

PEDRA ANGULAR 2

Slide 3

Slide 3 text

O LIVRO DO CALANGO: 2ª EDIÇÃO A CAMINHO •Disponível como Early Release parcial na plataforma O’Reilly Learning •Cerca de 100 páginas sobre type hints, em 4 capítulos + dezenas de exemplos •Novos exemplos simples com asyncio e concurrent.futures •Capítulo sobre protocolos e classes abstratas 100% repensado •Versão impressa EN: 4º trimestre, 2021 •Versão PT-BR: tradução começará depois da versão impressa EN 3

Slide 4

Slide 4 text

ESTUDO DE CASO: MAX(...) 4

Slide 5

Slide 5 text

A FUNÇÃO MAX(...) 5

Slide 6

Slide 6 text

UMA IMPLEMENTAÇÃO: MYMAX.MAX(...) Código dos exemplos no Github: 6 http://bit.ly/mymax-tdc

Slide 7

Slide 7 text

MYMAX.MAX(...) COM ANOTAÇÕES DE TIPO Código dos exemplos no Github: 7 http://bit.ly/mymax-tdc

Slide 8

Slide 8 text

CASO MAX: PASSO A PASSO Comparando inteiros 8

Slide 9

Slide 9 text

PASSO 0: COMPARANDO DOIS INTEIROS 9 http://bit.ly/mymax-tdc

Slide 10

Slide 10 text

TROPEÇO 1: COMPARANDO DOIS NÚMEROS #SQN 10 Porque não fazer assim?

Slide 11

Slide 11 text

O IDEAL É SER PRECISO NOS TIPOS DE RETORNO 11 Normalmente você sabe qual o tipo sua função vai devolver, então especifique o tipo da forma mais precisa. Lembre-se da Lei de Postel, ou Princípio da Robustez

Slide 12

Slide 12 text

12 Seja rigoroso com o que você envia, e tolerante com o que você recebe. —Jon Postel

Slide 13

Slide 13 text

PASSO 1: COMPARANDO DOIS NÚMEROS 13

Slide 14

Slide 14 text

PASSO 1: COMPARANDO DOIS NÚMEROS 14 No módulo numbers de Python já existe uma ABC numbers.Number.
 Porque não usá-la?

Slide 15

Slide 15 text

PASSO 1: COMPARANDO DOIS NÚMEROS 15 No módulo numbers de Python já existe uma ABC numbers.Number.
 Porque não usá-la? Resposta no final, se der tempo e alguém perguntar...

Slide 16

Slide 16 text

PASSO 2: COMPARANDO DOIS OBJETOS COMPARÁVEIS O que é comparável em Python? Vamos perguntar no console do interpretador: 16

Slide 17

Slide 17 text

DUCK TYPING OU TIPAGEM PATO: A ORIGEM DO TERMO 17 Não verifique se é-um pato: verifique se
 grasna-como-um-pato, anda-como-um-pato, etc.
 dependendo de qual parte do comportamento
 semelhante-a-pato você precisa [...] — Alex Martelli em
 comp-lang-python, 2000-07-26

Slide 18

Slide 18 text

PASSO 2: COMPARANDO DOIS OBJETOS COMPARÁVEIS 18

Slide 19

Slide 19 text

PASSO 3: COMPARANDO N OBJETOS 19

Slide 20

Slide 20 text

PASSO 4: COMPARANDO N OBJETOS, COM FUNÇÃO KEY= 20

Slide 21

Slide 21 text

PASSO 4: COMPARANDO N OBJETOS, COM FUNÇÃO KEY= 21

Slide 22

Slide 22 text

PASSO 4: COMPARANDO N OBJETOS, COM FUNÇÃO KEY= 22

Slide 23

Slide 23 text

INTERFACES EM PYTHON 23

Slide 24

Slide 24 text

INTERFACE É A CHAVE 24 Programe para uma interface, não para uma implementação — 1º Princípio de Projeto Orientado a Objetos
 descrito no livro Padrões de Projeto de
 Gamma, Helm, Johnson & Vlissides


Slide 25

Slide 25 text

O BENDITO CAPÍTULO 13... 25

Slide 26

Slide 26 text

26 Socorro!
 Por onde eu começo?

Slide 27

Slide 27 text

COMO LIDAMOS COM INTERFACES EM PYTHON Protocolo:
 qualquer objeto que implementa .quack() é um pato.
 27

Slide 28

Slide 28 text

COMO LIDAMOS COM INTERFACES EM PYTHON Protocolo:
 qualquer objeto que implementa .quack() é um pato.
 
 ABC (Abstract Base Class):
 uma instância de Marreco é um pato
 porque Marreco herda de Pato. 28

Slide 29

Slide 29 text

COMO LIDAMOS COM INTERFACES EM PYTHON Protocolo:
 qualquer objeto que implementa .quack() é um pato.
 
 ABC (Abstract Base Class):
 uma instância de Marreco é um pato
 porque Marreco herda de Pato. 29 “objeto semelhante a pato”
 (duck-like object) é um
 TIPO ESTRUTURAL

Slide 30

Slide 30 text

COMO LIDAMOS COM INTERFACES EM PYTHON Protocolo:
 qualquer objeto que implementa .quack() é um pato.
 
 ABC (Abstract Base Class):
 uma instância de Marreco é um pato
 porque Marreco herda de Pato. 30 “objeto semelhante a pato”
 (duck-like object) é um
 TIPO ESTRUTURAL Marreco é um 
 TIPO NOMINAL

Slide 31

Slide 31 text

QUATRO ABORDAGENS PARA TIPOS 31 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato

Slide 32

Slide 32 text

QUATRO ABORDAGENS PARA TIPOS 32 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato tipagem
 estática

Slide 33

Slide 33 text

QUATRO ABORDAGENS PARA TIPOS 33 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato tipagem
 estática tipagem pato estática

Slide 34

Slide 34 text

QUATRO ABORDAGENS PARA TIPOS 34 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato tipagem
 estática tipagem pato estática tipagem
 ganso assunto para outro dia...

Slide 35

Slide 35 text

35 O mapa do capítulo 13!

Slide 36

Slide 36 text

e-mail: [email protected] Twitter: @ramalhoorg MUITO GRATO!

Slide 37

Slide 37 text

37 Veja o código completo da classe abstrata (ABC) numbers.Number Ela não serve para tipagem estática porque não define nenhum método! Se você declarar uma variável do tipo numbers.Number, o Mypy rejeitará qualquer operação com essa variável!