Malka (Daniel Lemos) / Código Limpo resumido em 9 Tópicos

Created Wed, 13 Nov 2024 18:08:50 -0300 Modified Thu, 15 May 2025 14:41:38 -0300
694 Words

Imagem de um Livro aberto em cima de uma placa de chips - Gerado por IA

A busca por um código simples, manutenível e legível sempre foi o foco do meu desenvolvimento. Desde meu estágio, quando tive contato com boas práticas em uma célula de QA, busco constantemente aprimorar minha lógica e “gramática” de código. Ao estudar o livro ‘Clean Code’, de Robert C. Martin, fiz anotações que memorizei e utilizei a partir dai até os dias de hoje. Neste artigo, não trago muitas reflexões somente minha lista pessoal de anotações com base na leitura que fiz.

Falando em Nomes

Significativos: Evite nomes confusos ou abreviações excessivas. Use nomes que indiquem claramente o propósito da variável, função ou classe. Exemplo: idadeDoUsuario é melhor que idUsu.

Consistentes: Se você usar idadeDoUsuario em uma parte do código, use o mesmo nome em outras partes, em vez de idadeUsuario ou idade.

Pesquisáveis: Números mágicos são valores numéricos usados diretamente no código sem explicação. Use constantes com nomes descritivos ao invés de números mágicos. Exemplo: const IDADE_MINIMA = 18; é melhor que if (idade > 18).

Pensando em Funções

Pequenas e de Responsabilidade Única: Funções curtas são mais fáceis de entender e testar. Cada função deve ter um propósito claro e bem definido.

Nomes Descritivos: Use verbos que descrevam a ação realizada pela função. Exemplo: calcularIdade() é melhor que idade().

Argumentos Mínimos: vise a zero ou um argumento → Funções com muitos argumentos são complexas e difíceis de testar.

Cuidado com Efeitos Colaterais: evite modificar variáveis fora do escopo da função, a menos que seja o objetivo principal. Efeitos colaterais inesperados podem causar bugs difíceis de encontrar.

#Fazer ou Não fazer Comentários? Explique Porquê, Não O Quê: Use nomes descritivos e código claro para que o código se explique. Comentários devem explicar o “porquê” de uma decisão de design ou lógica complexa.

Atualizados: Mantenha os comentários atualizados com o código.

Evite Comentários Óbvios: não declare o óbvio, comentários como // incrementa a variável x são desnecessários.

Sem Código Comentado: Ferramentas de controle de versão (como o Git) permitem rastrear as alterações no código.

#Uma boa Formatação Consistência: Use um guia de estilo para garantir a consistência na formatação do código.

Densidade Vertical: Linhas em branco melhoram a legibilidade do código.

Formatação Horizontal: Use recuo para mostrar a estrutura do código e espaçamento para separar os elementos.

Formatação de Equipe: Toda a equipe deve seguir o mesmo guia de estilo.

Objetos e Estruturas de Dados do jeito Certo!

Encapsulamento: Proteja os dados internos de um objeto e forneça métodos para acessá-los e modificá-los.

Dados sobre Primitivos: Classes permitem agrupar dados e comportamento relacionados.

Diga, Não Pergunte: Em vez de perguntar a um objeto sobre seu estado e tomar decisões com base nisso, diga ao objeto o que fazer.

Lei de Demeter: Evite acessar objetos indiretamente através de outros objetos, lembre-se: um objeto deve falar apenas com suas dependências.

Tratando os Erros

Exceções acima de Códigos de Retorno: Exceções permitem lidar com erros de forma estruturada.

Exceções Específicas: Use exceções específicas para cada tipo de erro.

Mensagens Claras e Objetivas: Mensagens de erro informativas ajudam na depuração.

Falha Rápida, Correção Rápida: Não ignore ou oculte erros. Lide com eles o mais rápido possível.

Cuidando das Classes

Classes Pequenas e Coesas: Classes grandes e complexas são difíceis de entender e manter, lembre-se: Pequenas e de Responsabilidade Única.

Organizado para Mudança: Oculte os detalhes da implementação para que as mudanças não afetem outras partes do código.

Injeção de Dependência: Injeção de dependência torna o código mais flexível e fácil de testar.

Sistemas e suas Complexidades

Separação de Contextos: Cada módulo deve ter um propósito específico e bem definido.

Testabilidade: Escreva código que seja fácil de testar desde o início.

Um Passo de Cada Vez: Melhore o código continuamente por meio de pequenas refatorações.

Testes de Unidade

Testes Clean: Aplique os princípios de código limpo aos seus testes.

Reduza a Complexidade: Torne o código mais testável por meio de refatoração.

F.I.R.S.T.: Escreva testes que sejam rápidos de executar, independentes uns dos outros, repetíveis, capazes de se validar e escritos no momento certo. Ou seja, Fast (Rápido), Independent (Independente), Repeatable (Repetível), Self-Validating (Autovalidado) e Timely (Oportuno).

Uma Afirmação por Teste: Testes com muitas afirmações são difíceis de entender e manter.