![Page 1: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/1.jpg)
Python Clean CodeCodando no nível Wakanda
1
![Page 3: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/3.jpg)
![Page 4: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/4.jpg)
O que é Clean Code?
4
![Page 5: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/5.jpg)
Filosofia cuja o principal objetivo é aplicar técnicas para facilitar a escrita e leitura de um código
5
![Page 6: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/6.jpg)
Aprender a criar códigos limpos é uma tarefa árdua e requer mais do que conhecimento dos princípios e padrões. Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los agonizar para tomar decisões e o preço que pagarão por terem tomado da maneira errada.
Robert C. Martin
6
![Page 7: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/7.jpg)
7
O código faz● Uma coisa bem● O que é esperado
A busca por● Qualidade de código● Readability - fácil de ler● Desenvolvimento ágil
Clean Code
![Page 8: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/8.jpg)
Don't Repeat Yourself
Evite códigos duplicados● Dificéis de manter● Propenso a erros
8
DRY Principle
![Page 9: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/9.jpg)
9
Obfuscated code
![Page 10: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/10.jpg)
def elapse(year):
days = 365
if year % 4 == 0 or (year % 100 == 0 and year % 400 == 0):
days += 1
for day in range(1, days + 1):
print("Day {} of {}".format(day, year))
10
O que é ofuscado?
![Page 11: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/11.jpg)
def elapse(year): days = 365 if year % 4 == 0 or (year % 100 == 0 and year % 400 == 0): days += 1
for day in range(1, days + 1): print("Day {} of {}".format(day, year))
11
Desofuscado
def elapse(year):
days = 365
if is_leap(year):
days += 1
def is_leap(year):
...
![Page 12: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/12.jpg)
12
Pros e cons● Dificil de ler
● Não há separação de responsabilidade (função)
● Processo de compilação/build
● Outras linguagens fazem
● Ocorre no processo de minificação
![Page 13: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/13.jpg)
13
● Complexo, código ofuscado (não legível)
● Código duplicado
● Código que não revela sua principal intenção
Não é Clean Code
![Page 14: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/14.jpg)
![Page 15: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/15.jpg)
Nomes significativos● Revelem propósito● Passíveis de busca
15
Boas práticas
ymd = datetime.now() #Ruim
currentDate = datetime.now() #Bom
![Page 16: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/16.jpg)
Evite números mágicos (aleatórios)
16
Boas práticas
if my_var === 100: do_something() #Ruim
TOTAL_PERCENT = 100if my_var === TOTAL_PERCENT: #Bom do_something()
![Page 17: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/17.jpg)
17
Boas práticasCondicionais - Utilize booleanos de forma implícita:
nome = 'joao'lista_nomes = ['maria', 'joao', 'daniel']
if nome in lista_nomes: return trueelse: return false # Ruim
return nome in lista_nomes # Bom
![Page 18: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/18.jpg)
Condicionais - evitar condicionais negativas:
if should_not_process():if not should_not_process(): # Ruim
if should_process():if not should_process(): # Bom
18
Boas práticas
![Page 19: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/19.jpg)
Padrões de Design
19
![Page 20: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/20.jpg)
20
![Page 21: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/21.jpg)
@decorators - PEP-318
Modificação de objetos existentes● Novas funcionalidades● Não modificação de estrutura
21
Decorators
![Page 22: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/22.jpg)
22
def upper_decor(function): def wrapper(): func = function() make_uppercase = func.upper()
return make_uppercase
return wrapper
Decoratorsdef say_hello(): return 'hello world'
decor = upper_decor(say_hello)print(decorate())
---------------------------------
@upper_decordef say_goodbye(): return 'goodbye people'
![Page 23: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/23.jpg)
Padrão de design● Condições de entrada __enter__():● Condições de saída __exit__():
Separação de responsabilidades
Gerenciamento de recursos● Arquivos● DB
23
Context Managers
![Page 24: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/24.jpg)
Comando with - PEP-343
with open(filename) as fd: do_something(fd)
24
Context Managers
![Page 25: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/25.jpg)
def stop_db(): run("stop database")
def start_db(): run("start database")
class DBHandler(): def __enter__(self): stop_db() return self
def __exit(self, *args): start_db()
25
def main(): with DBHandler(): run("dump database") ...
Context Managers
![Page 26: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/26.jpg)
class Connector: def __init__(self, source): self.source = source self._timeout = 60
>>> conn = Connector("postgresql://localhost")>>> conn.source'postgresql://localhost'>>> conn._timeout60>>> conn.__dict__{'source': 'postgresql://localhost', '_timeout': 60}
26
Propriedades
![Page 27: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/27.jpg)
27
![Page 28: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/28.jpg)
Guia de estilo do Python: PEP-8
Pirâmide de testes● Testes unitários
28
Qualidade de código
![Page 29: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/29.jpg)
● Pylint● Pycodestyle● Flake8● Pyflakes
● Pyminifier● Pymor
29
Ferramentas● Pychecker● Mypy● Pep8● PyLama
![Page 30: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/30.jpg)
30
![Page 31: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/31.jpg)
31
![Page 32: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/32.jpg)
32
Referências - livros
![Page 33: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/33.jpg)
Python Code Quality Authority:● https://github.com/PyCQA
Python Enhancement Proposals:● https://www.python.org/dev/peps
33
Referências - links
![Page 35: Python Clean Code · Você deve suar a camisa; praticar sozinho e ver que cometeu erros, assistir os outros praticarem e errarem, vê-los tropeçar e refazer seus passos, vê-los](https://reader033.vdocuments.pub/reader033/viewer/2022053114/608f39aa4c1b9e5f6d569ead/html5/thumbnails/35.jpg)
35