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!