O que define um código limpo?

0

Esses dias me perguntaram sobre o que eu acho sobre “O que é código limpo, ou clean code?”

Acredito que deva existir 1000 respostas diferentes e corretas sobre este assunto, porém vou dar meu parecer:

Não há definição formal e duvido que um dia vá existir (é sintomático que não exista verbete na Wikipedia). Ele é subjetivo. Sempre que alguém disser o que é, desconfie. Mas é claro que algumas observações podem ser feitas independente de opinião. É óbvio que elas são vagas, não vão ajudar muito a definir com clareza o que é o termo mas também não farão presunções tendenciosas.

  • O fluxo de execução da aplicação é facilmente entendível, não importa em que paradigma, (não entenda fluxo só como o fluxo imperativo).
  • Os diversos objetos (nada a ver com OOP) tem relacionamento claramente definidos e é fácil percebê-los.
  • O papel e responsabilidade de cada participante da aplicação (classes, funções, variáveis, etc.) são claros, possivelmente com nome bem escolhido.

No momento não consigo lembrar de nada mais que não seja específico e subjetivo demais para ser aplicado como uma forma geral de entendimento do assunto.

Então o código precisa:

  • Ser fácil de entender por quem nunca o tinha visto antes
  • Possibilita manutenção sem grandes sobressaltos.
  • Funciona corretamente.

 

Claro que espera-se que o leitor do código seja um desenvolvedor capacitado, quem entenda bem a linguagem onde está escrito e entenda os fundamentos da computação. A não ser que um código seja escrito para fins didáticos não é obrigação do código limpo explicar de qualquer forma seu funcionamento para leigos (mesmo aqueles que são remunerados como desenvolvedores, isto existe, e muito).

Aí podemos começar definir algumas coisas mais específicas que ajudam cumprir estes três requisitos destacados acima:

  • As unidades de código devem ser curtas e ter apenas uma responsabilidade.
  • As partes “públicas” (a API) devem ser claras (óbvias, sem surpresas) e concisas (faz o mínimo necessário).
  • As estruturas de dados e algoritmos devem funcionar como o esperado.
  • O código deve ser facilmente verificável.
  • Códigos devem ser organizados e expressivos (concisamente indica a sua intenção)

Além disto provavelmente está indo além da definição básica e começa entrar no campo subjetivo.

Um livro muito interessante onde o primeiro capítulo do livro está disponível como artigo , é muito recomendado para uma leitura. No livro a cada página lida você vai se aprofundando e ele vai sugerindo certas coisas que são discutíveis. O livro não é ruim, todo mundo deveria lê-lo principalmente para abrir a sua mente e fazer você debater sobre seus conceitos do que é certo e/ou errado.


Só um adendo para não passar a falsa impressão que 100% do código escrito deva ser limpo. Claro que isto seria ideal mas há certos domínios em conjunto com certos requisitos que conflita com o conceito de código limpo. Pode ser raro, não ser aplicável em determinados tipos de projeto, mas existe situações assim. Como em tudo, você deve saber quando perseguir um ideal e quando ser pragmático e resolver o problema da forma mais adequada. Talvez no final das contas pode-se resumir à seguinte afirmação: “Código limpo é aquele que é escrito da melhor maneira possível analisando todas as variáveis de cenário, negócio, requisitos e experiência de quem o escreveu”.

O que acharam? Deixa aí nos comentários sua opinião!

Compartilhe.