se ler, como se estivéssemos lendo um bom livro • Deve contar uma história: ◦ O conflito: problema a ser resolvido ◦ A jornada: passos para a solução ◦ A resolução: um retorno ou uma ação do sistema
não é perda de tempo • Um código ruim diminui a produtividade do time com o tempo ◦ Os desenvolvedores ficam vadiando pelo código tentando entender… • O único jeito de cumprir os prazos, de ir rápido, é mantendo o código o mais limpo possível
is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Nomeamos variáveis, funções, argumentos, classes, módulos, pacotes… • Já que fazemos muito, devemos fazer bem • O nome de uma entidade deve deixar claro o que ela é, porque ela existe, o que ela faz e/ou como é usada
substitui um bom nome • Não usar nomes consagrados por outro significado • Evitar colocar o tipo da variável no nome • Evitar informação desnecessária Nomes significativos
substitui um bom nome • Não usar nomes consagrados por outro significado • Evitar colocar o tipo da variável no nome • Evitar informação desnecessária Nomes significativos
substitui um bom nome • Não usar nomes consagrados por outro significado • Evitar colocar o tipo da variável no nome • Evitar informação desnecessária • Não usar nomenclatura tipo “série numérica” Nomes significativos
substitui um bom nome • Não usar nomes consagrados por outro significado • Evitar colocar o tipo da variável no nome • Evitar informação desnecessária • Não usar nomenclatura tipo “série numérica” Nomes significativos
substitui um bom nome • Não usar nomes consagrados por outro significado • Evitar colocar o tipo da variável no nome • Evitar informação desnecessária • Não usar nomenclatura tipo “série numérica” • Não usar nomes engraçadinhos Nomes significativos
substitui um bom nome • Não usar nomes consagrados por outro significado • Evitar colocar o tipo da variável no nome • Evitar informação desnecessária • Não usar nomenclatura tipo “série numérica” • Não usar nomes engraçadinhos Nomes significativos
substitui um bom nome • Não usar nomes consagrados por outro significado • Evitar colocar o tipo da variável no nome • Evitar informação desnecessária • Não usar nomenclatura tipo “série numérica” • Não usar nomes engraçadinhos Nomes significativos
5 linhas é o ideal, mais de 20 é exagero ◦ Blocos com “if”, “else”, “for” devem ter o mínimo de linhas possível (apenas 1 se der), ou seja, devem haver outras funções dentro desses blocos ◦ Não deve haver mais de 2 níveis de indentação
a função faz (e quais são os argumentos e retornos) só pelo seu nome ◦ A função não deve fazer mais do que ela diz que faz (não deve ter efeitos colaterais) • Não deve haver repetição de código ◦ Usar funções para resolver isso
que se dê para ler o código como em um artigo de jornal: de cima para baixo ◦ Uma função que é chamada por outra deve estar logo abaixo daquela que a chama ◦ Evita ter que ficar rolando a página para cima e para baixo ◦ Deve dar para ler como sentenças que comecem com “Para…”
melhor ◦ Mais que 3 argumentos já é um exagero ◦ Muitos argumentos deixam as linhas longas e tendemos a esquecer em que ordem eles aparecem • O que pode ser feito: ◦ Ao invés de usar um argumento de flag (booleano), criar 2 métodos ◦ Usar mais atributos de objetos (self) ◦ Usar objetos como argumentos
mentindo ◦ Falta de cuidado de quem escreveu ◦ O comentário ficou velho (código foi alterado, mudado de lugar ou apagado) • Tente ao máximo não precisar de comentários
é de 200 a 500 linhas) ◦ Ninguém se anima de ler um artigo imenso no jornal • Prefira linhas curtas ◦ Não deve ser necessário rolar a tela para o lado ◦ PEP 8 fala em 79 caracteres
ele funcionar • Mas para dizer que a tarefa está feita é necessário refatorar para torná-lo limpo • Ao trabalharmos com código já existente, temos que deixar ele mais limpo do que quando chegamos • Pratique!!