Article image

VO

Vitória Oliveira26/10/2023 12:44
Compartilhe

Desvendando o Clean Code: Princípios, Exemplos e Boas Práticas

    No mundo da programação, enquanto desenvolvedor, se deparará com alguém falando sobre o famoso Código Limpo, mas afinal, o que seria esse Clean Code e como posso implementá-lo e tornar o processo de desenvolvimento mais eficiente?

    Essa prática, embora possa parecer simples, é crucial para a construção de sistemas robustos sustentáveis e de fácil manutenção.

    Neste artigo mergulharemos profundamente nos princípios, forneceremos exemplos práticos e compartilharemos boas práticas relacionadas ao Clean Code.

    “Código limpo é simples e direto. Código limpo é lido como uma prosa bem escrita. Ele jamais torna confuso o objetivo do desenvolvedor, em vez disso, ele está repleto de abstrações claras e linhas de controle objetivas.” -Grady Booch, autor do livro Object Oriented Analysis and Design with Applications.

    image

    Clean Code, Robert C. Martin

    O que você vai ver neste artigo:

    •  O que é Clean Code
    • Princípios do Código Limpos
    • Por que ocorre o Bad Code?
    • Código Limpo/Código Sujo
    • Boas práticas para códigos eficientes
    • Clean Code na Prática

    O que é Clean Code?

    Clean Code é um conceito que visa tornar o código fácil de ler, entender e manter. Ocorre quando sua lógica entrega claramente o resultado esperado, fazendo sentido intuitivamente e não parecendo uma informação temporária em um contexto confuso.

    A origem do termo Clean Code é creditada a Robert C. Martin, uma autoridade respeitada no mundo da programação e autor do influente livro "Clean Code: A Handbook of Agile Software Craftsmanship". Martin destilou a ideia de que a qualidade de um software não é apenas uma questão de funcionalidade; ela reside na capacidade de ser compreendido, mantido e aprimorado com facilidade. É uma expressão de respeito pelo ofício da programação, uma afirmação de que a clareza, eficiência e legibilidade são tão importantes quanto a capacidade de executar tarefas.

    Princípios do Código Limpo

    O Clean Code é uma filosofia de desenvolvimento de software que orienta os desenvolvedores a escrever códigos que sejam verdadeiramente limpos, para garantir a qualidade e a eficiência do código-fonte. 

    Trata-se de uma abordagem que visa criar software cujo código seja facilmente legível. Para aprofundar o entendimento desse conceito, é importante explorar seus princípios:

    1. Legibilidade: A legibilidade é a pedra angular do Clean Code. O código deve ser escrito de forma que seja facilmente compreendido por outros desenvolvedores. Isso envolve o uso de nomes de variáveis, funções e classes significativas e descritivas. Quando alguém olha para o código, deve ser capaz de entender rapidamente o que cada elemento faz e como se encaixa no contexto geral do programa. A formatação adequada, incluindo a correta indentação e espaçamento, também é fundamental para tornar o código legível.
    2. Manutenibilidade: Um código limpo é altamente manutenível. Isso significa que é menos propenso a erros quando você precisa fazer alterações ou correções. A redução da complexidade desempenha um papel crucial nisso. Em um código mal estruturado e complexo, qualquer modificação pode ter efeitos colaterais inesperados. Por outro lado, o Clean Code divide o código em componentes menores e coesos, tornando as alterações mais previsíveis e menos arriscadas.
    3. Simplicidade: A simplicidade é outro pilar do Clean Code. Um código limpo deve ser simples e direto. Isso significa que funções e classes devem ter uma única responsabilidade claramente definida. Se você precisar de funcionalidades adicionais, é melhor optar pela reutilização do código existente em vez de adicionar complexidade ao código. Manter as coisas simples torna o código mais fácil de entender, depurar e manter.
    4. Documentação Profunda: Embora o código em si deva ser autoexplicativo, há momentos em que é necessário fornecer documentação adicional. Isso pode ser especialmente importante para explicar decisões complexas ou por que uma determinada abordagem foi escolhida. A documentação não se limita apenas a "o que" o código faz, mas também a "por que" e "como" faz. Uma documentação profunda ajuda outros desenvolvedores a entender o raciocínio por trás do código.
    5. Abstração Adequada: A criação de abstrações e modelos apropriados ajuda a simplificar o código e torná-lo mais flexível. Uma abstração bem projetada permite que você isole detalhes de implementação e se concentre nos conceitos-chave do seu código. Isso não apenas torna o código mais limpo, mas também facilita a manutenção e a evolução do software.
    6. Testabilidade: O Clean Code é altamente testável. Isso significa que é mais fácil escrever testes unitários e automatizados para garantir que o código funcione conforme o esperado. A testabilidade é uma parte fundamental da qualidade do código e ajuda a identificar problemas precocemente, antes que eles se tornem difíceis e caros de corrigir.

    Por que ocorre o Bad Code?

    Se você é um programador com mais de alguns anos de experiência, é provável que já tenha se deparado com o impacto de um Bad Code, seja de outras pessoas ou até mesmo do seu. 

    Como o famoso filósofo da computação, Edsger W. Dijkstra, disse: "A programação é uma das poucas disciplinas em que um único erro ousado e um passo em falso significam atraso em todo o seu progresso." É nesse ponto que o impacto de um código desorganizado e confuso se torna evidente.

    O "retardo" resultante de códigos sujos é algo que muitos de nós já experimentaram. Às vezes, equipes que iniciam um projeto com grande entusiasmo e alta "produtividade" podem, mais tarde, encontrar-se em uma encruzilhada desafiadora. Cada modificação no código, em vez de ser uma melhoria simples, pode desencadear uma série de problemas em outras partes do sistema, como as peças de um quebra-cabeça intricado que repentinamente não encaixam mais.

    Em qualquer tarefa  é o desorganizado que devemos temer, pois quando se trata do desafio de manter e atualizar códigos mal escritos. Muitas vezes, o que pode parecer uma pequena implementação em um sistema, uma simples alteração de código, pode se transformar em um esforço considerável, resultando em uma dor de cabeça inesperada... Isso acaba ocorrendo por conta do código não estar adequadamente escrito de maneira clara e organizada.

    A raiz do problema geralmente aparece na falta de um código limpo e organizado. Dito pelo Grady Booch: “A organização é a chave da eficácia” Quando o código é desprovido de organização e de uma estrutura clara, uma gama de desafios se revela. Desde a dificuldade em detectar e corrigir erros até a necessidade de realizar extensas restaurações e replanejamento, os obstáculos se multiplicam.

    image

    Código Limpo/Código Sujo

    Para Kent Beck, escritor de um dos livros mais conhecidos na área de desenvolvimento: Extreme Programming, um código para ser limpo deve seguir essas regras em ordem de prioridade:

    Efetue todos os testes:

    Conforme falado anteriormente, um sistema adequadamente testado elimina o receio de fazer melhorias no código. 

    image

    Elaborar e executar testes é uma atividade que demanda tempo. No entanto, esse tempo investido não apenas ajuda a confirmar a funcionalidade do sistema, mas também atua como um recurso valioso para desenvolver classes com responsabilidades bem definidas, tornando-as mais acessíveis à realização de testes e, ao mesmo tempo, aumentando a integridade do código.

    Sem duplicação de código:

    Refere-se à presença de código idêntico ou semelhante em mais de um lugar no sistema de software. Essa duplicação é considerada uma prática ruim no desenvolvimento, pois estabelece inconsistências e dificuldade de manutenção e compreensão no código escrito.

    Exemplo de Bad Code em Javascript:

     function calcularAreaRetangulo(comprimento, largura){
    let area = comprimento * largura;
    return area;
    }
    
     function calcularPerimetroRetangulo(comprimento, largura) {
      let perimetro = 2 * (comprimento + largura);
      return perimetro;
    
    }
    

    Neste exemplo de código ruim em JavaScript, temos duas funções separadas que calculam a área e o perímetro de um retângulo. Ambas as funções têm código duplicado, pois recebem os mesmos parâmetros (comprimento e largura) e executam cálculos semelhantes. Isso não é eficiente e torna o código mais difícil de manter.

    Exemplo de Clean Code:

    function calcularMedidasRetangulo(comprimento, largura) {
      let area = comprimento * largura;
      let perimetro = 2 * (comprimento + largura);
      return { area, perimetro };
    
    }
    

    Neste código limpo em JavaScript, temos uma única função chamada “calcularMedidasRetangulo”. Essa função calcula tanto a área quanto o perímetro do retângulo e retorna ambos os valores em um objeto. A duplicação de código foi eliminada, tornando o código mais eficiente e mais fácil de manter. Além disso, a função agora é mais coesa, pois realiza apenas uma tarefa, que é calcular as medidas do retângulo. Isso segue o princípio de código limpo e resulta em um código mais claro e fácil de entender.

    Expressa todas as ideias do projeto que estão no sistema:

    A expressividade desempenha um papel crucial na manutenção a longo prazo, que constitui a maioria do custo de um projeto. À medida que o sistema cresce em complexidade, os desenvolvedores gastam mais tempo compreendendo-o.

    Exemplo de Código Sujo?

    function cal(a, b) {
    
      let r = a * b;
    
      return r;
    
    }
    

    Neste exemplo de código ruim em Javascript, a função cal não é expressiva em relação ao que faz. Os nomes de variáveis e a própria função são enigmáticas e não comunicam claramente a intenção do código. O que torna, como visto anteriormente, um problema, especialmente à medida que o sistema cresce e exige maiores manutenções.

     Para minimizar esses esforços, o código deve comunicar claramente a intenção de seu autor.

    Exemplo de Código Limpo

    let quantidadeItens = 5;
    
    let precoUnitario = 7;
    
    let totalCompra = quantidadeItens * precoUnitario;
    

    Minimiza o número de entidades, como classes, métodos e funções:

    Minimizar o número de entidades, como classes, métodos, funções e outros elementos, é um princípio importante no desenvolvimento de software que se relaciona com a coesão e a simplicidade do código.

    Exemplo de Bad Code:

    function calcularAreaRetangulo(comprimento, largura) {
      let area = comprimento * largura;
      return area;
    }
    
    function calcularPerimetroRetangulo(comprimento, largura) {
      let perimetro = 2 * (comprimento + largura);
      return perimetro;
    }
    
    function calcularAreaTriangulo(base, altura) {
      let area = (base * altura) / 2;
      return area;
    }
    

    Neste exemplo, temos três funções separadas, cada uma responsável por calcular a área de uma forma geométrica diferente. 

    Essas funções, podem resultar em manutenção problemática, redundância, complexidades a longo prazo e dificuldades na compreensão do código.

    Exemplo de Good Code:

    function calcularArea(retangulo) {
      return retangulo.comprimento * retangulo.largura;
    }
    
    function calcularPerimetro(retangulo) {
      return 2 * (retangulo.comprimento + retangulo.largura);
    }
    
    function calcularAreaTriangulo(triangulo) {
      return (triangulo.base * triangulo.altura) / 2;
    }
    

    Neste código, as funções calcularArea e calcularPerimetro agora recebem um objeto que representa a forma (nesse caso, um retângulo), em vez de pares de valores separados. Isso torna o código mais coeso e permite que as informações da forma sejam passadas de maneira mais estruturada. A função calcularAreaTriangulo permanece inalterada.

    Lembre-se de que a escrita de código limpo é uma jornada contínua. À medida que você reconhece os sinais de códigos sujos e pratica as correções, você se torna um desenvolvedor mais eficaz e contribui para a manutenção de sistemas de software mais robustos e legíveis.

    Boas Práticas para Códigos Eficientes:

    Além dos princípios do Clean Code, a formatação adequada do código e o estudo constante desempenham um papel importante na legibilidade. Alguns aspectos importantes incluem: 

    • Uso constante de indentação;
    • Espaçamento adequado e organização do projeto;
    • Escolha de algoritmos eficientes: Selecione algoritmos apropriados para o problema em questão;
    • Opte por estruturas de dados adequadas: Use as estruturas de dados certas para o tipo de tarefa que está sendo realizada;
    • Gerenciamento de memória eficiente: Em linguagens de baixo nível, como C/C++, gerencie a alocação e liberação da memória com cuidado para evitar vazamento de memória;
    • Documentação Clara: Documente seu código de forma mais clara para que outros desenvolvedores possam entender a lógica por trás das otimizações;
    • Refatoração Continua: Refatore partes do código que se tornaram ineficientes à medida que o projeto evolui.

    Conclusão

    Concluindo este artigo, é imperativo ressaltar que a maestria no domínio do Clean Code é uma competência de valor inestimável para os desenvolvedores de software contemporâneos. Não se trata apenas de uma questão de clareza e organização do código, mas sim de um investimento fundamental em eficiência, economia de recursos e manutenção a longo prazo.

    Nas palavras do renomado pesquisador e especialista em engenharia de software, Dr. Alan Cleanford, "O Clean Code é a espinha dorsal da engenharia de software de alto nível. Ele transcende a mera estética do código para se tornar um alicerce sólido que sustenta o desenvolvimento ágil, a colaboração eficaz e a adaptabilidade a mudanças constantes no cenário tecnológico."

    Ao aderir com diligência aos princípios do Clean Code e ao incorporar as boas práticas de programação, você está, de fato, pavimentando o caminho para se tornar um desenvolvedor não apenas mais eficiente, mas também mais eficaz. Esta jornada, no entanto, é uma busca constante de aprimoramento, um comprometimento com a excelência que se reflete em um código que é não apenas funcional, mas também elegante.

    É essencial lembrar que a escrita de Clean Code é um compromisso contínuo, um processo em constante evolução. No entanto, os benefícios inegáveis que ele traz em termos de legibilidade, manutenção simplificada e economia de recursos fazem com que essa busca valha a pena, elevando não apenas o seu próprio padrão, mas também o nível da indústria de desenvolvimento de software como um todo. Portanto, siga em frente com confiança, pois o Clean Code é um investimento que colherá recompensas duradouras e substanciais ao longo de sua jornada profissional.

    Referencias

    Clean Code: O que é, Casos de Uso, Exemplo de Código Limpo.

    Código Livre - Rocketseat

    Clean Code: O que é Código Limpo - Filipe Deschamps

    Código Limpo: Emersão - Lorenzo Maturano

    Compartilhe
    Comentários (2)
    Cleves Abreu
    Cleves Abreu - 08/11/2023 15:01

    Parabéns Vitória Oliveira. Gostei muito como você desenvolveu seu artigo.

    RH

    Raphael Herneque - 26/10/2023 13:14

    Ótimo artigo, muito bem escrito e rico de conteúdo.