Voltar

Clean Code

Boas práticas na programação
08/11/20   |   Lucas Ramalho
Clean code
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”

Sobre o autor:

Lucas Ramalho
Coordenador de Conteúdo

Olá, sou Lucas, curto a área de Data Science, IA e fazer uns pães =D