Clean Code

Karla Nascimento
b2w engineering
Published in
6 min readDec 2, 2020

Todo programador já se deparou com um código mal escrito, onde diversos conceitos estão misturados: atributos não estão declarados de forma clara e expressiva e métodos fazendo mais de uma atividade, por exemplo.

O custo de manter um código ruim é maior, pois leva mais tempo e atenção dos desenvolvedores envolvidos no projeto, além de dificultar a inserção de novas funcionalidades.

Para evitar que esses erros aconteçam, o Clean Code tem se mostrado como uma ótima opção. Esse conceito subjetivo visa a prática da criação de linhas de código que melhoram a escrita e facilitam sua leitura e entendimento.

Neste artigo, iremos discutir sobre os conceitos e ideias apresentadas no livro Clean Code: A Handbook of Agile Software Craftsmanship, de Robert C. Martin.

Em sua obra, Martin traz à tona a visão de grandes programadores sobre o tema e a importância de criarmos um código limpo. Em suma, veremos que um bom programador reconhece que a legibilidade do seu código é tão importante quanto a execução do mesmo.

Como os códigos ruins acontecem?

Os códigos ruins ocorrem por conta de diversos fatores que afetam o desenvolvedor e a tarefa em execução como:

  • Regras de negócio que mudam para algo não planejado;
  • Não dispor de tempo para revisar a estrutura do código;
  • Decisões ruins são tomadas;
  • Ocorrem falhas na modelagem dos dados;
  • O programador não se sente confortável com a atividade;
  • Não se sabe como melhorar o código.

O que é código limpo?

Por se tratar de um conceito subjetivo, existem diversas definições sobre o que é um código limpo.

De acordo com Bjarne Stroustrup, criador do C++ e autor do livro A linguagem de programação C++:

Clean Code: A Handbook of Agile Software Craftsmanship, de Robert C. Martin, página 7.

“Gosto do meu código elegante e eficiente. A lógica deve ser direta para dificultar o encobrimento de bugs, as dependências mínimas para facilitar a manutenção, o tratamento de erro completo, de acordo com uma estratégia clara e o desempenho próximo do mais eficiente, de modo a não incitar as pessoas a tornarem o código confuso com otimizações sorrateiras. O código limpo faz bem apenas uma coisa.”

De acordo com Michael Feathers, autor de Working Effectively with Legacy Code:

Fonte: Clean Code: A Handbook of Agile Software Craftsmanship, de Robert C. Martin, página 9.

“Eu poderia listar todas as qualidades que vejo em um código limpo, mas há uma predominante que leva a todas as outras. Um código limpo sempre parece que foi escrito por alguém que se importava. Não há nada de óbvio no que se pode fazer para torná-lo melhor. Tudo foi pensado pelo autor do código e, se tentar pensar em algumas melhoras, você voltará ao início, ou seja, apreciando o código deixado para você por alguém que se importa bastante com essa tarefa.”

Para Ron Jeffries, autor de Extreme Programming Installed and Extreme Programming Adventures in C#

Fonte: Clean Code: A Handbook of Agile Software Craftsmanship, de Robert C. Martin, página 10.

“Nestes anos recentes comecei e quase finalizei com as regras de Kent Beck sobre código simples. Em ordem de prioridade, são:

- Efetue todos os testes;

- Sem duplicação de código;

- Expressa todas as ideias do projeto que não estão no sistema;

- Minimiza o número de entidades, como classes, métodos, funções e outras do tipo.”

Sendo assim, de modo geral, existem seis artifícios a serem considerados quando desejamos obter um código limpo:

1 — Elegante e eficiente;

2 — Faz uma coisa só;

3 — Testes;

4 — Sem duplicação (DRY);

5 — Expressivo;

6 — Fácil manutenção.

Além dos artifícios anteriores, podemos considerar algumas dicas rápidas e de fácil aplicação no dia a dia de um programador:

Nomes

Nomes são a porta de entrada para o código, portanto devem ser bem pensados. O ideal é que sejam expressivos, representando de fato o que estão nomeando.

Geralmente, a nomenclatura seguirá convenções, variando de acordo com o tipo de linguagem de programação escolhida, que facilita as nomeações e padroniza a escrita.

Ainda no que diz respeito a expressividade, é sempre bem-vindo utilizarmos nomes do domínio do problema, contextualizando o leitor ou revisor do código.

Assim devemos evitar, por exemplo, o uso de prefixos e/ou sufixos, como atributos nomeados de aux, x, y, z, etc. Por fim, nos perguntamos: o contexto é claro? O nome é sucinto? É pronunciável?

Funções

As funções/métodos devem executar uma ação. A ideia é de que sejam bem pequenas e tenham suas ações bem definidas dentro do escopo. Quanto menor é, melhor! Para que nossas funções fiquem pequenas, devemos nos atentar aos seguintes detalhes:

  • O nível de abstração que a função está inserida;
  • A quantidade de números de argumentos (quanto menos, melhor!);
  • Evitar argumentos booleanos, pois os mesmos dão a entender que dentro da função lidaremos com uma condição if;
  • Evitar argumentos de saída;
  • Seguir fielmente o conceito de Do one thing.

Sobre esse conceito de Do one thing, Martin Fowler diz:

“ Se você perdeu tempo tentando identificar o que um bloco de código faz, extraia ele para uma função separada e nomeie a função para refletir o que ela faz.”

E também respeitar o conceito de “DRY” (Don’t repeat yourself).

Ele ainda completa:

“A primeira vez que você fizer algo, só faça. Na segunda, encontre a repetição, mas duplique o código mesmo assim. Na terceira, refatore.”

Comentários

Comentários feitos em códigos devem ser evitados! Códigos bem escritos não demandam um comentário explicando a lógica utilizada.

O uso de comentários também não respeita o conceito DRY (Don’t repeat yourself), pois contém muitas repetições, principalmente os que são criados para gerar javadoc e podem esconder code smells, que são bugs em potencial no código.

Um exemplo de comentário desnecessário é o demonstrado acima, afinal o mesmo apenas explica o que já é possível deduzir através do código e nomes dos atributos.

Logo, comentários raramente são necessários, já que um código bem escrito tem sua lógica clara.

Como criar código limpo?

Pense em todos os requisitos necessários para o código, implemente a funcionalidade, crie testes para o código novo garantindo o seu funcionamento observável e por fim o refatore.

Como manter o código limpo?

A manutenção do código começa com a etapa de criação ou a implantação de novas funcionalidades com a visão global do código, identificando pontos de mudança, criando testes afim de validar esses pontos, pensando em uma nova modelagem para o código, refatorando e, por fim, testando.

Martin Fowler define refatoração como uma mudança feita na estrutura interna do software, a fim de deixá-lo mais compreensível e modificável sem mudar o seu comportamento observável.

E o ato de refatorar como reestruturação do software, aplicando uma série de refatorações sem mudar o seu comportamento observável.

Exemplos de refatoração: extração de blocos lógicos em funções, renomeações, criação de objetos de parâmetro, extração para classes, remoção de código inutilizado e decomposição de condicionais aninhadas.

Para garantir que a refatoração feita não modificou o comportamento do código, precisamos sempre testá-lo.

The Boy Scout Rule

“Leave the campground cleaner than you found it.”

O programador deve se preocupar em aprimorar o código que pode ser otimizado sempre que manipulá-lo.

A regra do escoteiro diz respeito a essa ação de deixar o código sempre melhor do que quando o encontramos.

Conclusão

De acordo com os conceitos apresentados, é possível compreender a importância da criação de um código limpo.

Conforme vamos aplicando em nosso dia a dia, desenvolvemos um olhar mais técnico que identifica com maior facilidade códigos mal escritos e melhorias de prontidão.

O código limpo ajuda na manutenção e consequentemente diminui o custo do projeto.

Se você leu esse artigo até o final, agora está apto a sair treinando a habilidade de criar códigos limpos.

Se você busca uma oportunidade de desenvolvimento, trabalhando com inovação em um negócio de alto impacto, acesse o portal B2W Carreiras! Nele, você consegue acessar todas as vagas disponíveis. Venha fazer parte do nosso time!

--

--