Um pouco de Clean para o seu Code: algumas dicas básicas para tornar seu código mais simples e claro
Programar é uma arte que exige estudo, prática e tempo. Quando iniciamos nesta área, atentamos a princípios básicos, como: uma boa lógica matemática, estruturas de dados e algoritmos, para estruturar nossos primeiros programas. No início desta jornada, nossa única preocupação é fazer o código funcionar e exibir aquele famoso “Hello World!”, na tela.
À medida que aprofundamos nosso conhecimento e evoluímos como desenvolvedores, começamos a perceber novas complexidades que estão atreladas ao desenvolvimento de um software, como: escalabilidade, performance, resiliência e etc.
Por quê ter um “código limpo” é tão importante?
Um dos principais problemas no ciclo de vida de um software é a sua manutenção. A verdade, é que muitas vezes pisamos em ovos quando temos que alterar um código que não está muito claro, principalmente se ele foi feito por outra pessoa. A chance de uma alteração gerar uma pilha de “bugs”, ou “quebrar” a aplicação, neste cenário, é muito grande.
Para lidar com tais desafios existem vários princípios e boas práticas a serem adotados no processo de desenvolvimento, como: design patterns, SOLID, etc. Um dos princípios mais simples de se implementar, e que ataca diretamente em melhorias para ajudar no entendimento e manutenção do código é o Clean Code (código limpo).
O quê é um Clean Code?
Clean Code é um conceito que foi criado pelo Robert C. Martin, e amplamente divulgado em seu livro, Código Limpo: Habilidades práticas do Agile Software (leitura obrigatória para devs), que tem como base melhorar a legibilidade e manutenção de um software.
Resumidamente, ter um Clean Code, em minhas palavras, é ter um código que seja simples e fácil de se entender, sem duplicações, com abstrações simples e que seja testável.
- Código auto explicativo
- Sem duplicação de código
- Com abstrações simples
- Cobertura de testes
Clean Code na Prática
Para melhor ilustrar estes conceitos, separei alguns exemplos básicos e de rápida implementação que ajudarão a tornar o seu código mais “limpo”.
Código auto explicativo:
Quando estamos escrevendo um código, a lógica está muito fresca em nossa mente. Temos bem claro o motivo de cada variável, método, classe e etc. Porém, à medida que o tempo passa, fica cada vez mais difícil entender o motivo que nos levou a tal pensamento, e ainda existe a possibilidade de alguém precisar dar manutenção em nosso código. Quem já pegou um código que não era limpo sabe a dificuldade que é entender uma lógica feita por outra pessoa. Gastamos muito mais tempo tentando entender o que foi feito do que de fato, codificando. É por isto, que ter um código de alta expressividade (código que se explica) tem grande valor.
Crie variáveis com nomes claros.
Ruim
Imagine você dando manutenção em um código que tem uma variável chamada “d”. Você certamente terá que ler toda a regra de negócio para entender o que esta variável representa, ou tão ruim quanto, terá que recorrer a um comentário para entender o seu significado.
Melhor
Quando criar uma variável, pense em todo o escopo em que ela está sendo inserida. A regra é pensar em um nome mais óbvio possível, que qualquer pessoa entenderia o seu significado no código. Esta regra também vale para métodos, classes, interfaces e etc. No exemplo acima, fica óbvio o motivo da existência desta variável, armazenar o tempo em dias desde a criação daquela postagem.
Não use comentários
int d; // tempo decorrido em dias
Aproveitando o primeiro exemplo, você percebeu que o comentário está ali para explicar algo que o código por si só não consegue? Este é um grande sinal de que o código não está limpo. Um código limpo não necessita de comentários ele se explica por si só.
“O uso adequado de comentários é compensar nosso fracasso em nos expressar no código” p. 54
Use uma palavra por conceito
Voltamos a falar de nomeclaturas, hehe. O nome que damos para o que estamos criando, é tão importante quanto o que estamos criando. Imagine um software que utilize os termos “get”, “retrieve” e “fetch” para recuperar dados. Toda vez que você tivesse que implementar um método que recupere dados, ficaria na dúvida em qual termo usar. Além disso, não teria um padrão no código. Seria uma salada mista, não acha? Portanto escolha uma palavra para cada conceito e fique com ela, isto evitará confusões e criará uma padronização no seu código.
Abstrações simples, transforme sua lógica em métodos, evite fazer mais do que o necessário
No exemplo abaixo, temos uma classe que possui um método que tem como funcionalidade, calcular o pagamento de um funcionário. Porém, ele precisa checar se este possui benefícios.
Ruim
Não é obrigação do método “calcPayment” saber como é calculado se um determinado funcionário tem direito aos benefícios. Ele apenas precisa saber se ele receberá os benefícios e para dar sequência aos seus cálculos.
Melhor
Ter métodos expressivos que abstraem uma lógica ajuda na manutenção e legibilidade do código. Perceba que não é necessário entender como o método “isEligibleForBeneficts” funciona, seu nome já diz o que ele faz, e é tudo que o método “calcPayment” precisa saber. Agora, ele pode se preocupar com a única coisa que deveria fazer, calcular o pagamento.
Sem duplicação de códigos
Um código limpo deve evitar repetições. Todas as vezes que você tiver uma lógica que se repete, crie um método para ela.
Cobertura de testes
“Um código, sem testes, não está limpo. Não importa o quão elegante, legível ou acessível esteja, se ele não possuir testes, ele não é limpo.” p. 9
Um dos pilares para um código limpo é a cobertura de testes. Um código sem testes não é um código confiável. Não importa quais boas práticas foram utilizadas, se ele não tiver uma boa cobertura de testes, ele não está completo.
Criar testes para nosso código aumenta nosso tempo de desenvolvimento, mas os benefícios são amplos: maior entendimento da lógica, te ajuda a manter as funções pequenas (o que garante uma melhor manutenção), confiabilidade do que foi feito, segurança para mudanças futuras (caso precise alterar algo, saberá que não quebrará tudo).
Conclusão
Clean Code é um assunto muito amplo. Abordar tudo que ele envolve precisaria de mais artigos ou um livro (Clean Code: Habilidades Práticas do Agile Software). Resolvi neste artigo, escolher alguns pontos que acho interessante, e que acredito que ajudarão a melhorar o seu código. Porém, isto foi só um rabisco. Existe muito mais além do que foi abordado aqui e recomendo a pesquisa e procura por materiais sobre o assunto, para aqueles que ainda não estão familiarizados com o tema.
Espero ter contribuído um pouco e “que a força este com vocês!”