Clean Code
Boas práticas na programação
08/11/20
| Lucas Ramalho

Post Boas práticas
Na área de computação temos um desafio bem grande em relação a organização de código e boas práticas. Não é incomum pegar um projeto que está em andamento e com isso é preciso estudar o código para poder continuar da melhor forma possível. Isso se torna mais fácil quando escrevemos um código limpo e organizado. Mas como podemos organizar o código e ajudar o próximo desenvolvedor ou a empresa que você está trabalhando?
Iremos tocar em alguns tópicos de um excelente livro que é Clean code: A Handbook of Agile Software Craftsmanship, escrito por Michael C. Feathers e baseado em um talk da nossa queridíssima Clara Mendes!
Então vamos para o que interessa, o que é Clean code ou Código limpo? Em resumo é uma filosofia que procura aplicar técnicas simples a fim de facilitar a leitura, escrita e manutenção de um código. Facilitar tudo isso faz com que você aumente a Produtividade do seu time, diminua o estresse, torna o seu projeto muito bem otimizado para ser escalado e para ter manutenções, torna o seu projeto mais profissional e de quebra o seu código fica limpinho 😁.
Essa filosofia se baseia em 5 princípios que são: Ordenação, Padronização, Sistematização, Limpeza e Disciplina.
Ordenação
A ordenação é importante para você saber se localizar melhor dentro do código. Isso pode ser feito padronizando a nomeação de pastas, tipos de arquivo e etc.
Por exemplo você quer uma variável para o nome do seu cachorro:
const d = "rex";
mas é mais intuitivo descrever o porquê da variável:
const dogName = "rex";
E procure evitar nomes dúbios como por exemplo:
const hp;
// é o valor de uma hipotenusa ?
// ou será que uma variante no Unix?// horsepower? 🏎
// Pode ser que esteja falando o novo filme do Harry potter 🧹
Padronização
Para deixar o seu código mais padronizado defina entre os membros do time como vão lidar com variáveis, funções, e identação do código, assim fica mais fácil de ler e entender 😉.
Coisas para considerar ao nomear uma variável é pensar no padrão que ela se encaixa
e qual a intenção dela!
Escrever conceitos similares de forma parecida é informar, escrever de forma inconsistente é desinformar.
<header> Um belo e consistente header 😍</header> <footer> Um belo e consistente footer 😍</footer> <header > Um belo e consistente header 😍</header > <parteDeBaixo> Oh não! Assim complica o entendimento 😕</parteDeBaixo>
Escreva nomes que sejam pronunciáveis!
/* Nomes pronunciáveis */
let Date genymdhms;
let Date generationTimestamp;
Os nomes devem ser fáceis de procurar, dessa forma quando pensar em alguma variável vai ser mais fácil lembrar do que estão falando e o que guardam, por exemplo:
// Não é claro e são muitos "a" que vão ser encontrados em uma busca
a, a1, a2
// Nome mais preciso e fácil de encontrar em uma busca
MAX_CLASSES_PER_STUDENT;
Uniqueness
Procure ter apenas um conceito por palavra e uma palavra por conceito, vai ficar mais fácil saber que tipo de método você está usando ou que conceito está se referindo, por exemplo
DeviceManager + ProtocolController
add // add
DeviceManager + ProtocolController
add // insert
Procure também sempre usar termos da área de ciência da computação, nomes de algoritmos, ou termos matemáticos. Assim fica mais fácil entender o que você estava pensando quando escreveu aquela variável. Se não tiver termos nessa área que descrevem bem o que você quer utilize palavras chaves do que você quer descrever ou resolver.
Sistematização
Tenha definido onde tudo vai ficar, organização de pastas e de tipos de arquivos. Quando tudo tem seu lugar facilita na manutenção do código pois tudo vai estar onde você espera!
Limpeza
Depois de horas resolvendo debugando o código é importante tirar os comentários que eram muito mais para você, se livrar dos códigos inúteis que ficaram comentados ao longo do caminho e “console.log”s
Disciplina
Talvez a parte mais difícil é se manter consistente com os princípios do clean code, seguir as boas práticas e frequentemente repensar sobre o trabalho e implementar as mudanças necessárias.
Agora vamos falar alguns conceitos a se considerar quando formos escrever funções.
É importante procurar escrever funções pequenas, dessa maneira é menos provável que quem está tentando entendê-la se perca. Funções devem fazer apenas uma coisa, e uma coisa apenas, e ter um objetivo claro, se ela vai executar algo que ela faça somente isso.
Não torne a função algo complexo fazendo diversas coisas ao mesmo tempo, e isso implica também na quantidade de argumentos que uma função vai receber. Quanto mais simples e objetiva ela é menor a probabilidade de você precisar receber argumentos, o que seria o ideal! se você precisa de mais de 3 argumentos em uma função talvez seja interessante rever o código 🤔.
Nomeie as funções também de maneira clara e que descreva de alguma forma o que ela faz, é melhor ter um nome longo para uma função do que um nome que não seja descritivo.
E agora um dos conceitos que eu considero mais importante , o DRY(Don’t Repeat Yourself). Se um pedaço de código está se repetindo em muitos lugares, talvez seja interessante transformá-lo em uma função, vai ficar mais bonito e de quebra vai ser mais produtivo.
Outro tópico do Clean code são os comentários, quando são necessários? como usá-los? O que comem? Hoje no Globo Repórter.
Há 4 tipos de bons comentários, comentários legais -não comemorando ou elogiando o código, mas implicações jurídicas que aquele trecho possa ter- comentários que deixem mais claro a intenção do que estava acontecendo ali, vale ressaltar que não é explicando tudo que aquele trecho faz, o código por si só deve fazer isso, é interessante também colocar comentários para avisar outro desenvolvedor sobre algumas possíveis alterações e no que elas podem acarretar ou até mesmo fazer um TODO list dentro do código, é uma ótima forma de manter o time inteiro conectado e alinhado com o que está acontecendo no código.
Agora por último mas não menos importante vamos falar sobre a formatação do código, isso quer dizer, definir com o time que está trabalhando no projeto algumas regrinhas de formatação do código e manter essa formatação de forma consistente.
Existem alguns tipos de formatação e seus objetivos. Por exemplo a formatação vertical, tem certa inspiração na formatação de jornais, procura ser simples e explicativo. A parte de cima do código deve ter mais conceitos e algoritmos de alto nível e conforme vai descendo o nível de detalhamento dos conceitos vai aumentando.
“Abertura vertical entre conceitos”, o espaço também fala! separar bem conceitos ou algoritmos com espaços em branco é muito saudável para ter um respiro no código e talvez expresse a sua forma de codar e mostra como você pensa na construção do mesmo.
Se atente a Densidade vertical, linhas de código que são relacionadas devem ficar próximas, e as não relacionadas espaçadas!
Tente sempre considerar a maneira e quando você vai usar uma variável ou uma função, procure declarar elas próximo ao seu uso, assim como quando uma função chama outra, procure manter a função que é chamada embaixo.
A formatação horizontal se baseia na famosa indentação. A quantidade de linhas que é predefinido para indentação varia, muito tem quem goste de 4 espaços, outros 2 e a personificação fica ao gosto do Dev, mas na hora de formar um time é importante deixar isso definido. Cada nível que descer dentro de uma Classe, função ou bloco de código que tenha uma hierarquia procure indentar. Procure também deixar as linhas curtas, nunca é bom quando você tem um scroll horizontal enorme e precisa correr ele para entender algo do código.
Essas são algumas dicas que você pode levar para o seu time ou para sua vida profissional, vai facilitar muito a sua maneira de desenvolver os seus projetos e te tornará um profissional mais organizado e eficiente
“Grandes programadores pensam no sistemas como histórias a serem contadas, mais do que como programas a serem escritos”