Os códigos a seguir fazem a mesma coisa
É disso que se trata o Clean Code!
Como eu cheguei ao Clean Code?
Adoção do Clean Code e patterns de arquitetura
Boa parte do tempo passamos lendo código
Quem vai manter o código no futuro?
Eu diria que sempre existe aquele projeto...
Devemos ter cautela.
porque não o vemos em ação com tanta frequência?
Conjunto de conceitos simples, que infelizmente muita gente não coloca em prática
Atribua nomes pronunciáveis em uma conversa
Imagine uma ligação telefônica...
Considere a seguinte variável:
double valorFP = 0;
Você consegue ser mais descritivo que 'valorFP'
...
private Collection lista;
...
A variável possui um bom nome?
Talvez possamos melhorar...
...
private Collection listaProdutos;
...
...
private Collection catalogoProdutos;
...
Interessante, parece que estamos trabalhando com vendas.
public class TelaVenda{
private Collection produtosProntaEntrega;
private Collection produtosCarroEntrega;
private Collection produtosSomenteAvista;
}
...
private Collection catalogoProdutos;
private Collection CatalogoProdutos;
private Collection catalogo_produtos;
private Collection _catalogoProdutos;
...
E realmente é!
Mas acredite, muita gente não faz!
public class TelaVenda{
action1();
action2();
action3();
action4();
salvar1();
salvar2();
salvar3();
}
Devemos aplicar as mesmas regras!
Devemos nos preocupar com o que os nossos métodos fazem e como fazem.
Em resumo, métodos
public class Animal{
public void doTela(List< ItemPedido > list){
...
database.save(list);
mostrarDialog("Sua venda foi salva com sucesso!");
...
}
}
Parece um exemplo bobo, mas isso acontece muito!!
Mas porquê diminuir o tamanho dos métodos?
Afinal, que outro cenário utilizaria aquele método que valida, salva, formata, conecta no banco e desenha um pokémon na tela?
Quanto mais próximo do núcleomenor o método.
Código duplicado dificulta a manutenção
Na qual você chama o setText e o componente mostra uma dialog após definir o texto
label.setText("Texto");
//When I wrote this, only God and I understood what I was doing
//Now, God only knows
Eles podem mentir, pois não compilam nem são executados...
Comentários não melhoram
Ao invés de sair inserindo comentários pense se o código não precisa de uma refatoração.
// Formato da data yyyy-MM-dd;
Comentários óbvios
// lista de produtos
private Collection listaProdutos;
public double getTotalVenda(){
// 06/06/1666 - batman - alterou o calculo mediante solicitação do Mário,
// adicionado fator multiplicacao - tarefa TF13123120
// 01/12/2006 - robin - adicinou desconto mediante solicitação fulando
double totalVenda = getTotalBruto() * getPorcentagemDesconto() * FATOR_MULTIPLICACAO_INVENTADO ;
return totalVenda;
}
Normalmente existem resistência
Histórico de commits de um repositório SVN, onde você pode salvar qualquer informação relevante.
//private MenuProcess criarMenuCadastro() {
// MenuProcess menuCadastro = new MenuProcess();
// menuCadastro.setText(getString(R.string.atividade_menu_aceite));
// menuCadastro.setWidth(80);
// menuCadastro.setState(MenuProcess.StateMenu.PENDENTE);
// menuCadastro.setResImageIcon(R.drawable.ic_tab_aceite);
// menuCadastro.setResImageIconSelected(R.drawable.ic_tab_aceite_selected);
// menuCadastro.setSelected(true);
// return menuCadastro;
//}
Método de quase 200 linhasboa parte dele são códigos comentados...
if(getTextView().getText().toString().equalsIgnoreCase(ordemServicoComercial.getNumOS()))
Não crie linhas intermináveis
Merge em arquivos com linhas intermináveis
Membros da mesma equipe devem utilizar o mesmo estilo de workspace com a finalidade de:
Commit sem estilo de workspace
Commit utilizando mesmo estilo de workspace
Como você trata os erros do seu software?
Em geral só capture uma exceção quando for realizar alguma ação ou melhorar a mensagem.
Caso contrário passe para 'cima'.
Sim, todos os catchs fazem a mesma coisa
Você já escreveu algum teste que possa ser repetido automaticamente?
Como seria testar um método gigante?
Todos os conceitos apresentados podem e devem ser aplicados aos testes.
Exemplo de teste simples para um formatador de moeda:
Caberia uma apresentação inteira sobre testes unitários e Test Driven Development(TDD).
Sem problemas, a idéia principal ter testes unitários que possam ser repetidos.
Muito mais que um checklist!
Sempre deixe o código mais limpo do que você o encontrou.
Com cuidado obviamente!
Para manter as janelas intactas
Começamos onde estamos, com o que temos e fazendo o que podemos.
JeremyBytes - Clean Code: Homicidal Maniacs Read Code, Too!
Espero ter contribuído!