cleaner-code-centralit-2015

80
1 de 80 www.centralit.com.br | [email protected] Cleaner Code Por um mundo com menos xingamentos

Upload: valdemar-junior

Post on 24-Jan-2018

155 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cleaner-Code-CentralIT-2015

1 de 80www.centralit.com.br | [email protected]

Cleaner CodePor um mundo com menos xingamentos

Page 2: Cleaner-Code-CentralIT-2015

2 de 80www.centralit.com.br | [email protected]

O LIVRO

Robert C. Martin (Uncle Bob)

Programador desde 1970;

Fundador e Presidente Object

Mentor Inc.

lDesigning Object-Oriented C++

Applications using the Booch

Method. 1995.

lAgile Software Development:

Principles, Patterns and Practices.

2002.

Page 3: Cleaner-Code-CentralIT-2015

3 de 80www.centralit.com.br | [email protected]

Page 4: Cleaner-Code-CentralIT-2015

4 de 80www.centralit.com.br | [email protected]

Page 5: Cleaner-Code-CentralIT-2015

5 de 80www.centralit.com.br | [email protected]

Page 6: Cleaner-Code-CentralIT-2015

6 de 80www.centralit.com.br | [email protected]

SonarQube

“É uma ferramenta opensource para análise egerenciamento de qualidade de código queoferece um relatório visual e a evoluçãohistórica do código.”

www.sonarqube.org

Page 7: Cleaner-Code-CentralIT-2015

7 de 80www.centralit.com.br | [email protected]

Page 8: Cleaner-Code-CentralIT-2015

8 de 80www.centralit.com.br | [email protected]

Page 9: Cleaner-Code-CentralIT-2015

9 de 80www.centralit.com.br | [email protected]

Situação

Quem nunca pegou um código que deverialevar horas e levou semanas para ser corrigido?

Manter o código mais limpo possível.

Page 10: Cleaner-Code-CentralIT-2015

10de 80www.centralit.com.br | [email protected]

Isso é preocupante pra nós?

Toda vez que você escreve um Bad Code, vocêestá fazendo parte do problema.

Page 11: Cleaner-Code-CentralIT-2015

11de 80www.centralit.com.br | [email protected]

Médico e Paciente

Page 12: Cleaner-Code-CentralIT-2015

12de 80www.centralit.com.br | [email protected]

Evolução contínua

Page 13: Cleaner-Code-CentralIT-2015

13de 80www.centralit.com.br | [email protected]

Clean Code

”Qualquer um consegue escrever código queum computador entende. Bons programadoresescrevem código que humanos entendem.”

Martin Fowler

Page 14: Cleaner-Code-CentralIT-2015

14de 80www.centralit.com.br | [email protected]

Page 15: Cleaner-Code-CentralIT-2015

15de 80www.centralit.com.br | [email protected]

Como conquistar isso?

Page 16: Cleaner-Code-CentralIT-2015

16de 80www.centralit.com.br | [email protected]

Single Responsibility Principle(SRP)

”Uma classe deve ter um, e apenas um, motivopara ser modificada. Esse princípio também échamado de coesão e implica em dizer que umaclasse deve fazer uma única coisa e fazê-labem.”

Page 17: Cleaner-Code-CentralIT-2015

17de 80www.centralit.com.br | [email protected]

Princípio Don't Repeat Yourself (DRY)

”A duplicação (seja ela acidental ou proposital)pode levar a pesadelos de manutenção, alémde atrapalhar a refatoração e gerarcontradições lógicas.”

Page 18: Cleaner-Code-CentralIT-2015

18de 80www.centralit.com.br | [email protected]

Nomes Significantes

•Leva tempo, mas ajuda muito mais.•Teremos programadores mais felizes.•Deve-se dizer o que faz, por que existe e comousá-la.•Se precisar de comentários, não é um nomesignificante.

Page 19: Cleaner-Code-CentralIT-2015

19de 80www.centralit.com.br | [email protected]

Nomes Significantes

Page 20: Cleaner-Code-CentralIT-2015

20de 80www.centralit.com.br | [email protected]

Utilize nomes buscáveis para números e StringsEx.: X = 20para X = VALOR_HORA;

Page 21: Cleaner-Code-CentralIT-2015

21de 80www.centralit.com.br | [email protected]

Page 22: Cleaner-Code-CentralIT-2015

22de 80www.centralit.com.br | [email protected]

Page 23: Cleaner-Code-CentralIT-2015

23de 80www.centralit.com.br | [email protected]

Encapsule condições

Lógica booleana já é difícil o bastante entender.Se não vier dentro de um contexto de um if ouwhile.

Page 24: Cleaner-Code-CentralIT-2015

24de 80www.centralit.com.br | [email protected]

Encapsule condições

Page 25: Cleaner-Code-CentralIT-2015

25de 80www.centralit.com.br | [email protected]

Encapsule condições

Page 26: Cleaner-Code-CentralIT-2015

26de 80www.centralit.com.br | [email protected]

Encapsule condições

Evite condições negativas. Elas são um poucomais difíceis de entender. Quando possível,deveria ser expressado como positiva.

Page 27: Cleaner-Code-CentralIT-2015

27de 80www.centralit.com.br | [email protected]

Utilize Enums ao invés de Constantes

Page 28: Cleaner-Code-CentralIT-2015

28de 80www.centralit.com.br | [email protected]

Nome de Classes e Métodos

Classes Pronomes. Ex.: Paciente, WikiPage, Conta.

•Métodos Verbos: deletar, postar, curtir, desenhar.

Page 29: Cleaner-Code-CentralIT-2015

29de 80www.centralit.com.br | [email protected]

Sobrecarga de Construtores

Utilize métodos estáticos que descrevam os argumentos.

Page 30: Cleaner-Code-CentralIT-2015

30de 80www.centralit.com.br | [email protected]

Escolha uma palavra por Conceito

Ex.: Buscar..., recuperar..., get..., pegar...

Não use mesmo termo para coisas distintas.

Page 31: Cleaner-Code-CentralIT-2015

31de 80www.centralit.com.br | [email protected]

Métodos

•Regra 1: Deveriam ser pequenas.•Regra 2: Deveriam ser menores do que isso.

•O quanto pequeno deveria ser? (linhas)

De duas a cinco linhas.

Page 32: Cleaner-Code-CentralIT-2015

32de 80www.centralit.com.br | [email protected]

Blocos e Identação

If, else e while deveriam ter apenas uma linha de código, provavelmente uma função.

Page 33: Cleaner-Code-CentralIT-2015

33de 80www.centralit.com.br | [email protected]

Blocos e Identação

Mantém pequeno e adiciona valor de documentação, por que a função pode ter um bom e descritivo nome.

Page 34: Cleaner-Code-CentralIT-2015

34de 80www.centralit.com.br | [email protected]

Blocos e Identação

Métodos curtos tendem a fazer uma coisa por vez, adicionando coesão.

Page 35: Cleaner-Code-CentralIT-2015

35de 80www.centralit.com.br | [email protected]

Switches

Grandes, quebram o SRP e se um novo tipo for adicionado irá crescer mais.

Page 36: Cleaner-Code-CentralIT-2015

36de 80www.centralit.com.br | [email protected]

Switches

Solução: Definir o switch em uma classe abstrata e “não deixar ninguém ver”. Utilizar polimorfismo.

Page 37: Cleaner-Code-CentralIT-2015

37de 80www.centralit.com.br | [email protected]

Princípio de Ward

“Você sabe quando está trabalhando em um clean code quando cada rotina/método/classe faz o que realmente você espera.”

Page 38: Cleaner-Code-CentralIT-2015

38de 80www.centralit.com.br | [email protected]

Argumentos de métodos

Ideal: ZERO.Quantidade de parâmetros superior a 3 devem ser evitados e quando utilizados devem ser justificados.

Page 39: Cleaner-Code-CentralIT-2015

39de 80www.centralit.com.br | [email protected]

Argumentos de métodos

São difíceis de entender e de testar.

Page 40: Cleaner-Code-CentralIT-2015

40de 80www.centralit.com.br | [email protected]

Métodos com UM argumento

Você faz uma pergunta sobre o argumento.

Page 41: Cleaner-Code-CentralIT-2015

41de 80www.centralit.com.br | [email protected]

Métodos com UM argumento

Page 42: Cleaner-Code-CentralIT-2015

42de 80www.centralit.com.br | [email protected]

Métodos com UM argumento

Opera em cima desse argumento, transformando-o em outra coisa.

InputStream fileOpen(“nome_arquivo”);

Page 43: Cleaner-Code-CentralIT-2015

43de 80www.centralit.com.br | [email protected]

Métodos com UM argumento

Page 44: Cleaner-Code-CentralIT-2015

44de 80www.centralit.com.br | [email protected]

Argumentos FLAG

São feios. Não é uma boa prática, além de declarar que o método tem mais de uma responsabilidade.

Page 45: Cleaner-Code-CentralIT-2015

45de 80www.centralit.com.br | [email protected]

Argumentos FLAG

Page 46: Cleaner-Code-CentralIT-2015

46de 80www.centralit.com.br | [email protected]

Métodos com DOIS argumentos

Mais difícil de entender, mas as vezes é OK.

Ex.: new Point(0,0);

Page 47: Cleaner-Code-CentralIT-2015

47de 80www.centralit.com.br | [email protected]

Métodos com DOIS argumentos

As vezes pode levar ao erro.

Ex.: assertEquals(expected, actual);

Page 48: Cleaner-Code-CentralIT-2015

48de 80www.centralit.com.br | [email protected]

Métodos com TRÊS argumentos

Utilizar objetos/classes como argumento.

Page 49: Cleaner-Code-CentralIT-2015

49de 80www.centralit.com.br | [email protected]

Métodos com TRÊS argumentos

Page 50: Cleaner-Code-CentralIT-2015

50de 80www.centralit.com.br | [email protected]

Métodos com TRÊS argumentos

Utilizar objetos/classes como argumento.

Ex.: Pega exemplo do nome social

Page 51: Cleaner-Code-CentralIT-2015

51de 80www.centralit.com.br | [email protected]

Métodos

Qualquer método que faça você verificar a declaração ou sua implementação, seria um tempo desperdiçado.

Page 52: Cleaner-Code-CentralIT-2015

52de 80www.centralit.com.br | [email protected]

Métodos

Funções deveriam fazer ou perguntaralgo. Mudar o estado do objeto ou retornar alguma informação sobre ele e não os dois.

Page 53: Cleaner-Code-CentralIT-2015

53de 80www.centralit.com.br | [email protected]

Exceptions

Prefira Exceptions à códigos de erro.

Page 54: Cleaner-Code-CentralIT-2015

54de 80www.centralit.com.br | [email protected]

Exceptions – Códigos de erro

São feios, confundem a estrutura de código com o processo/tratamento de erro.

Page 55: Cleaner-Code-CentralIT-2015

55de 80www.centralit.com.br | [email protected]

Exceptions – Exceções

Fornece uma ótima separação do que o código faz, deixando fácil de entender e de modificar.

Page 56: Cleaner-Code-CentralIT-2015

56de 80www.centralit.com.br | [email protected]

Exceptions – Boas práticas

Utilize try-catch primeiro.Catch tem que deixar o sistema consistente.

Page 57: Cleaner-Code-CentralIT-2015

57de 80www.centralit.com.br | [email protected]

Exceptions – Boas práticas

Page 58: Cleaner-Code-CentralIT-2015

58de 80www.centralit.com.br | [email protected]

Exceptions – Não retorne NULL

lPrefira lançar uma Exception ou retornar um objeto especial ao invés de NULL.

Page 59: Cleaner-Code-CentralIT-2015

59de 80www.centralit.com.br | [email protected]

Exceptions – Não retorne NULL

lNão tem boas práticas para tratar NULL. A forma racional de tratar isso é não passar/retornar null.

Page 60: Cleaner-Code-CentralIT-2015

60de 80www.centralit.com.br | [email protected]

Exceptions

Utilize unchecked exception.

Page 61: Cleaner-Code-CentralIT-2015

61de 80www.centralit.com.br | [email protected]

Comentários

Não comente código ruim, reescrevá-os.

Comentários não ajudam um código sujo! Emgeral, servem para explicar um código ruim.

Page 62: Cleaner-Code-CentralIT-2015

62de 80www.centralit.com.br | [email protected]

Comentários

Comentários são compensações para nossas falhas em nos expressar no código.

Page 63: Cleaner-Code-CentralIT-2015

63de 80www.centralit.com.br | [email protected]

Comentários

Se você acha que precisa escrever um comentário, tente pensar novamente e expresse o que você quer no código.

Page 64: Cleaner-Code-CentralIT-2015

64de 80www.centralit.com.br | [email protected]

Por que comentários são ruins?

Por que eles mentem. Não sempre e não intencionalmente, mas com muita frequência.

Page 65: Cleaner-Code-CentralIT-2015

65de 80www.centralit.com.br | [email protected]

Noise Comments

Get's / Set'sConstrutores padrãoGerados pela IDE

Page 66: Cleaner-Code-CentralIT-2015

66de 80www.centralit.com.br | [email protected]

Comentário Informativo

Retorno de métodos abstratos.TODO's.Ampliar a importância em algo, API

Públicas.

Page 67: Cleaner-Code-CentralIT-2015

67de 80www.centralit.com.br | [email protected]

Positions Markers

lEx.: // Actions //////////////////

Page 68: Cleaner-Code-CentralIT-2015

68de 80www.centralit.com.br | [email protected]

Positions Markers

Page 69: Cleaner-Code-CentralIT-2015

69de 80www.centralit.com.br | [email protected]

Comentários

Pessoas não deletam isso. Eles pensam que existe uma razão que é muito importante para não deletá-los

Page 70: Cleaner-Code-CentralIT-2015

70de 80www.centralit.com.br | [email protected]

Comentários

Page 71: Cleaner-Code-CentralIT-2015

71de 80www.centralit.com.br | [email protected]

Comentários

Page 72: Cleaner-Code-CentralIT-2015

72de 80www.centralit.com.br | [email protected]

Classes

lDeveriam ser pequenas. O quanto pequenas? Não pequenas em quantidade de linhas, mas em responsabilidades.

Page 73: Cleaner-Code-CentralIT-2015

73de 80www.centralit.com.br | [email protected]

Classes

lO nome da classe deve descrever quais responsabilidades está preenchida. Nós deveríamos descrever uma classe com +-25 palavras, sem usar Se, e, ou, mas...

Page 74: Cleaner-Code-CentralIT-2015

74de 80www.centralit.com.br | [email protected]

Classes

lUma classe deve ser aberta para extensão e fechado para modificação.

Page 75: Cleaner-Code-CentralIT-2015

75de 80www.centralit.com.br | [email protected]

Design Simples

lExecute todos os testes.lRemova duplicações.lExpresse a intenção do programador.lMinimize o número de classes e métodos.

Page 76: Cleaner-Code-CentralIT-2015

76de 80www.centralit.com.br | [email protected]

REGRA DOS ESCOTEIROS

Deixe a área do acampamentomais limpa do que como vocêa encontrou.

Page 77: Cleaner-Code-CentralIT-2015

77de 80www.centralit.com.br | [email protected]

Finalmentes

•Os nomes devem ser pronunciáveis.•Evite encodings.

Page 78: Cleaner-Code-CentralIT-2015

78de 80www.centralit.com.br | [email protected]

Finalmentes

Não tenha medo de mudar código. Seremos gratos quando você mudar (para melhor!). Seguir essas regras e melhorar a leitura do seu código é um valor que será pago a curto e a longo prazo.

Page 79: Cleaner-Code-CentralIT-2015

79de 80www.centralit.com.br | [email protected]

Mensagem

Redefina o código, divida funções, mude nomes, elimine duplicações, deixe os métodos curtos e reordene-os.

Page 80: Cleaner-Code-CentralIT-2015

80de 80www.centralit.com.br | [email protected]

Obrigado!E-Mail

[email protected]