O documento fornece diretrizes para escrever código limpo, discutindo tópicos como:
1) Nomes significativos para variáveis, funções e classes;
2) Funções pequenas que fazem uma única coisa;
3) Tratamento de exceções ao invés de códigos de erro.
SOBRE O QUEFALAREI
• nomenclaturas • objetos
• funções • estrutura de dados
• classes • tratamento de exceções
• formatação • boundaries
• comentários • unit testing
5.
SOBRE O QUENÃO FALAREI
• dependency injection • emergência
• TDD • concorrência
• refactoring • frameworks de teste
O QUE ÉUM CÓDIGO LIMPO?
• direto ao ponto • padrões definidos
• mínimas dependências • de fácil leitura/entendimento
• sem duplicação • coberto de testes
• fácil manutenção • elegante sindrome da janela
quebrada
8.
“NÃO SOU UMEXCELENTE DESENVOLVEDOR. SOU APENAS
UM DESENVOLVEDOR MEDIANO QUE SEGUE À RISCA AS BOAS
PRÁTICAS DE UM CÓDIGO LIMPO.”
(um dev muito famoso)
NOMES SIGNIFICATIVOS
1. What kinds of things
are in theList?
2. What is the significance
of the zeroth subscript
of an item in theList?
3. What is the significance
of the value 4?
4. How would I use the list
being returned?
NOMES SIGNIFICATIVOS
1. Parte do nosso cérebro é dedicado ao conceito de palavras. e palavras, por definição,
são pronunciaveis; usemos essa parte do cérebro!
2. Programar é uma atividade social.
3. método Dê tê á Érre Cê Dê
NOMES SIGNIFICATIVOS
1. Muito mais facil encontrar WORK_DAYS_PER_WEEK DO QUE “5”
2. “SUM” não é de fato um nome muito útil, mas ao menos já é mais buscável do que
simplestemente “s”
3. CODE SMELL! MAGIC NUMBER!
NOMES SIGNIFICATIVOS
CLASSES
em geral,classes devem ser representadas por substantivos, não verbos.
bons exemplos: Cliente, Perfil, Estoque, etc.
MÉTODOS
em geral, métodos devem ser representadas por verbos ou frases verbais
bons exemplos: enviarPagamento, removerPagina, salvar, etc. (prefira o infinitivo)
FAÇA UMA ÚNICACOISA
blocos e endentação,
indicios de que está
fazendo muita coisa
25.
FUNÇÕES
• repare a endentação (sim, é assim que escreve ;)
• muitos níveis ~= muita responsabilidade
•o método deve fazer uma única coisa, e bem!
• dá para extrair? está fazendo mais de uma coisa
FUNÇÕES
• seu código deve ser lido como uma narrativa
• temos sujeitos, verbos e predicados :)
• narrativas são frases com uma ordem coerente
• lembre-se disso ao extrair em métodos privados
COMENTÁRIOS “Ooh, I’d better comment that!”
No! You’d better clean it!
• em geral, servem para explicar um código ruim
• um bom código é auto-documentado
• extraia para um método que faça o que diz!
COMENTÁRIOS
// format matched kk:mm:ss EEE, MMM dd, yyyy
Pattern timeMatcher = Pattern.compile(
"d*:d*:d* w*, w* d*, d*");
• por falta do que escrever
• redundantes
• doc em APIs não-públicas
• dizendo algo que o próprio código deveria dizer
• código comentado :/
PYTHON: PEP8
explicar opq da PEP 8, é sempre bom saber qual existem padroes para
sua importância para o padrão da linguagem. nomes de classe, nomes
pessoas que vão ler o python tem um padrão, de modulo, nomes de
codigo, etc. Java tem outro, C++ tem metodos, variaveis,
outro constantes, etc.
OBJETOS E ESTRUTURASDE DADOS
• objetos expõem comportamentos e escondem
dados
• estruturas
de dados expõem seus dados e não têm
comportamentos significativos
OBJETOS E ESTRUTURASDE DADOS
• um método f de uma classe C só conhece:
• métodos de C
• objetos criados por f
• objetos passados como argumentos para f
• objetos em variáveis de instância de C