Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clean Code: Boas práticas e design de código

Clean Code: Boas práticas e design de código

Gefy Marcos

August 24, 2019
Tweet

More Decks by Gefy Marcos

Other Decks in Technology

Transcript

  1. "Aplicar técnicas simples que visam facilitar a escrita e leitura

    de um código, tornando-o de fácil compreensão e revelando a sua real intenção.” Clean Code: A Handbook of Agile Software Craftsmanship; Robert C. Martin @gefymarcos
  2. "Aplicar técnicas simples que visam facilitar a escrita e leitura

    de um código, tornando-o de fácil compreensão e revelando a sua real intenção.” Clean Code: A Handbook of Agile Software Craftsmanship; Robert C. Martin @gefymarcos
  3. "Aprender a criar códigos limpos é uma tarefa árdua e

    requer mais do que o simples conhecimento dos princípios e padrões. Você deve suar a camisa;" Clean Code: A Handbook of Agile Software Craftsmanship; Robert C. Martin @gefymarcos
  4. “Qualquer um consegue escrever código que um computador entende. Bons

    programadores escrevem códigos que humanos entendem.” Martin Fowler @gefymarcos
  5. //Valida se o cliente possui benefícios if ((cliente.idade > 45

    && cliente.salario < enumValorSalarios.salarioMinimo) @gefymarcos
  6. if (this.isPossuiBeneficios(cliente)) ... ... possuiBeneficios(cliente: Cliente) { return cliente.idade >

    45 && cliente.salario < enumValorSalarios.salarioMinimo) } @gefymarcos
  7. // BAD class Diario { gerarMedia(aluno) { // 1 if

    (aluno) { // 2 if (this.calculaFrequencia(aluno)) { // 3 if (this.calculaMedia(aluno) >= 7) { return 'Aprovado'; } else { return 'Reprovado'; } } else { throw new Exception('Sem frequência suficiente'); } } else { throw new Exception('Aluno não encontrado.'); } } } @gefymarcos
  8. // GOOD class Diario { gerarMedia(aluno) { if (aluno) {

    calcularSituacao(aluno); } else { throw new Exception('Aluno não encontrado.'); } } calcularMedia(notas) { if (this.media(notas) >= 7) { return 'Aprovado'; } else { return 'Reprovado'; } } calcularSituacao(aluno) { if (this.calcularFrequencia(aluno)) { this.calcularMedia(aluno.notas); } else { throw new Exception('Sem frequência suficiente'); } } } @gefymarcos
  9. // BAD function() { if (sucesso) { return executarSucesso(); }

    else { return tratarErro(); } } // GOOD function() { if (!sucesso) { return tratarErro(); } return executarSucesso(); } Abordagem otimista @gefymarcos
  10. Abordagem pessimista // GOOD function() { if (sucesso) { return

    executarSucesso(); } return tratarErro(); } // BAD function() { if (sucesso) { return executarSucesso(); } else { return tratarErro(); } } @gefymarcos
  11. // GOOD class Aluno { id: number; notas: Nota[]; }

    class Nota { private _valor: number; set valor(valor: number) { if (this.isNotaValida(valor)) { this._valor = valor; } } get valor() { return this._valor; } isNotaValida(valor: number) { return (valor >= 0 && valor <= 10); } } @gefymarcos
  12. Extract Method class Board { private int[][] data = ...

    public String toString() { StringBuffer buffer = new StringBuffer(); for(int i = 0; i<10; i++) { for(int j = 0; j<10; j++) { buffer.append(data[i][j]); buffer.append(“\n"); } } } } @gefymarcos
  13. Extract Method class Board { private int[][] data = ...

    public String toString() { StringBuffer buffer = new StringBuffer(); for(int i = 0; i<10; i++) { for(int j = 0; j<10; j++) { buffer.append(data[i][j]); buffer.append(“\n"); } } } } @gefymarcos
  14. Extract Method private collectRow(StringBuffer buffer, int row) { for(int j

    = 0; j<10; j++){ buffer.append(data[row][j]); } buffer.append("\n"); } @gefymarcos
  15. // BAD class Diario { gerarMedia(aluno) { // 1 if

    (aluno) { // 2 if (this.calculaFrequencia(aluno)) { // 3 if (this.calculaMedia(aluno) >= 7) { aluno.situacao = 'Aprovado'; } else { aluno.situacao = 'Reprovado'; } if (this.aluno.situacao === 'Aprovado' && this.isFaturasPagas() && this.isConcluiuHorasExtraCurriculares()) { this.emitirCertificado(aluno); } … } else { throw new Exception('Sem frequência suficiente'); } } else { throw new Exception('Aluno não encontrado.'); } } } @gefymarcos
  16. // GOOD class Diario { fecharDiario(aluno) { if (aluno) {

    aluno.situacao = this.calcularSituacao(aluno); if (!aluno.isPossuiPendencias()) { this.emitirCertificado(aluno); } } } isPossuiPendencias() { return this.isFaturasPagas() && this.isConcluiuHorasExtraCurriculares(); } isPossuiMedia(aluno: Aluno) { return this.calculaMedia(aluno) >= 7; } isPossuiFrequencia(aluno: Aluno) { return this.calculaFrequencia >= 70; } calcularSituacao(aluno: Aluno) { if (this.isPossuiMedia(aluno) && this.isPossuiFrequencia(aluno)) { return APROVADO; } return REPROVADO; } } @gefymarcos
  17. “Se uma janela de um edifício for quebrada e logo

    não receber reparo, a tendência é que passem a arremessar pedras nas outras janelas e posteriormente passem a ocupar o edifício e destruí-lo.” Fixing Broken Windows: Restoring Order and Reducing Crime in Our Communities; George L. Kelling e Catherine Coles; @gefymarcos
  18. “Ao sair da área onde você estava acampado, deixe-a mais

    limpa do que quando a encontrou.” @gefymarcos
  19. Conclusão @gefymarcos Clean code são técnicas simples; Programador lê muito

    mais do que escreve; Arrume suas janelas; Limpe seu acampamento; Agile não quer dizer código ruim;
  20. Conclusão @gefymarcos Clean code são técnicas simples; Programador lê muito

    mais do que escreve; Arrume suas janelas; Limpe seu acampamento; Agile não quer dizer código ruim;
  21. Conclusão @gefymarcos Clean code são técnicas simples; Programador lê muito

    mais do que escreve; Arrume suas janelas; Limpe seu acampamento; Agile não quer dizer código ruim;
  22. Conclusão @gefymarcos Clean code são técnicas simples; Programador lê muito

    mais do que escreve; Arrume suas janelas; Limpe seu acampamento; Agile não quer dizer código ruim;
  23. Conclusão @gefymarcos Clean code são técnicas simples; Programador lê muito

    mais do que escreve; Arrume suas janelas; Limpe seu acampamento; Agile não quer dizer código ruim;