1) O documento discute princípios de código limpo, incluindo nomes significativos, única responsabilidade de métodos e funções, e estruturas de decisão claras.
2) É enfatizado o uso de nomes que revelem a intenção do código, métodos com única responsabilidade e o retorno de exceções ao invés de valores especiais.
3) Exemplos mostram como refatorar código para seguir esses princípios de código limpo.
22. Revele sua intenção double calcula( double d1, double d2); int main() { // preço do produto double prProd = 17.99; // valor do desconto double desc = 0.2; // valor do produto com desconto double valor = calcula(prProd, desc); cout << valor; return 0; } // calcula o valor de um produto com desconto double calcula( double d1, double d2) { return d1 - (d1 * d2); }
23. Mapa Mental double calcula( double d1, double d2); int main() { // preço do produto double prProd = 17.99; // valor do desconto double desc = 0.2; // valor do produto com desconto double valor = calcula(prProd, desc); cout << valor; return 0; } // calcula o valor de um produto com desconto double calcula( double d1, double d2) { return d1 - (d1 * d2); }
24. Revele sua intenção int main() { // preço do produto double precoDoProduto = 17.99; // valor do desconto double desconto = 0.2; // valor do produto com desconto double valorComDesconto = calculaDesconto(precoDoProduto, desconto); cout << valor; return 0; } // calculo o valor de um produto com desconto double calculaDesconto( double d1, double d2) { return d1 - (d1 * d2); }
27. Nomes Genéricos #Envia o boleto para ser descontado no banco def processa (boletoBancario): #Calcula o imposto total de um funcionário def calcula (funcionario): #Mostra o relatório de finanças def mostrar (): #Executa consultas na fila de espera def executar ():
28. Nomes Genéricos #Envia o boleto para ser descontado no banco def descontarBoleto (boletoBancario): #Calcula o imposto total de um funcionário def calcularImposto (funcionario): #Mostra o relatório de finanças def mostrarRelatorio (): #Executa consultas na fila de espera def executarConsultasEmEspera ():
39. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for (Produto produtosComDesconto : ProdutosComDesconto) { if (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double valorFinal = produto.getPreco() - produto.getPreco() * VALOR_DESCONTO ; // Cria o boleto de pagamento Boleto boletoDePagamento = new Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(valorFinal); boletoDePagamento.imprimir(); } } // Se o produto não tiver desconto // Cria o boleto de pagamento Boleto boletoDePagamento = new Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(produto.getValor()); boletoDePagamento.imprimir(); }
40. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for (Produto produtosComDesconto : ProdutosComDesconto) { if (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double valorFinal = produto.getPreco() - produto.getPreco() * VALOR_DESCONTO ; // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); } } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), produto.getPreco()); }
41. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto if (produtoTemDesconto(produto)) { // Calcula o valor com desconto double valorFinal = produto.getPreco() - produto.getPreco() * VALOR_DESCONTO ; // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), produto.getPreco()); }
42. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto double valorFinal = produto.getPreco(); if (produtoTemDesconto(produto)) { // Calcula o valor com desconto // Cria o boleto de pagamento valorFinal = calcularDesconto(produto.getPreco()); } // Se o produto não tiver desconto // Cria o boleto de pagamento criarBoletoDePagamento(vendedor.getNome(), valorFinal); }
43. Única responsabilidade public void venderProduto(Vendedor vendedor, Produto produto) { double valorFinal = produto.getPreco(); if (produtoTemDesconto(produto)) valorFinal = calcularDesconto(produto.getPreco()); } criarBoletoDePagamento(vendedor.getNome(), valorFinal); }
59. Repetição public void venderProduto(Vendedor vendedor, Produto produto) { // Verifica se o produto tem desconto for (Produto produtosComDesconto : ProdutosComDesconto) { if (produtosComDesconto.getId() == produto.getId()) { // Calcula o valor com desconto double valorFinal = produto.getPreco() - produto.getPreco() * VALOR_DESCONTO ; // Cria o boleto de pagamento Boleto boletoDePagamento = new Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(valorFinal); boletoDePagamento.imprimir(); } } // Se o produto não tiver desconto // Cria o boleto de pagamento Boleto boletoDePagamento = new Boleto(); boletoDePagamento.setNomeVendedor(vendedor.getNome()); boletoDePagamento.setValor(produto.getValor()); boletoDePagamento.imprimir(); }
60. Repetição public class Imagem { public void moverImagem( int x, int y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } }
61. Repetição public class Imagem { public void moverImagem( int x, int y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } }
62. Repetição public class Imagem { public void moverImagem( int x, int y){ this .imagem.getRetangulo().getPontoX().set(x); this .imagem.getRetangulo().getPontoY().set(y); } } public class Imagem { public void moverImagem( int x, int y){ this .imagem.getRetangulo().mover(x, y); } }
79. Bons programadores “ Você está lendo este livro por dois motivos. Primeiro, você é um programador. Segundo, você quer ser um programador melhor. Bom. Precisamos de melhores programadores.”
83. Praticar é preciso “ Aprender a escrever um código limpo é uma tarefa difícil. Requer mais que conhecimento sobre princípios e padrões. Você precisa suar. Você precisa praticar e ver suas falhas.“