Programação
As 4 regras do código limpo
Você já teve vergonha de mostrar seu código para um colega de trabalho, pois considerava ele mal organizado e difícil de ler? Se sim, saiba que você não está sozinho. Alguns programadores durante suas carreiras passam por situações parecidas com essa e normalmente isso acontece porque muitas vezes eles não seguem as regras do código limpo. Neste artigo eu vou te apresentar 4 regras que vão te ajudar a criar um código muito mais limpo e legível.
Qual é a importância de se escrever um código limpo?
Primeiro de tudo devemos entender que um código ruim pode funcionar, mas se ele não for limpo e bem planejado, pode destruir por completo um projeto de software. Temos que manter em mente, que quando programamos, programamos para que outras pessoas (ou até nós mesmos) possam entender o nosso código. Quando você escreve um código limpo, você facilita o processo de entendimento dele por outros programadores, temos que considerar que isso é essencial quando você trabalha em equipe. Vamos supor que você está em uma equipe de desenvolvimento de software e durante o desenvolvimento do projeto é muito importante que todos os membros da sua equipe consigam entender o código que você escreve, caso contrário, isso pode gerar muita confusão, muito atraso e muitos bugs.
“Mas eu nunca trabalho em equipe”, bom, mesmo quando você é um desenvolvedor solo é muito importante que você escreva um código limpo pois isso vai facilitar com que você faça manutenções e evolua aquele software, é muito fácil você esquecer um número de telefone, imagine um código inteiro. Seguindo esta linha, eu te garanto que se você escrever um código sujo durante o desenvolvimento de um determinado projeto, e ler este código um mês depois, você não vai entender mais nada e vai ter muita dificuldade de fazer qualquer manutenção ou evolução no programa. Portanto, se você quiser criar softwares saudáveis, é muito importante que você escreva-os de uma maneira limpa e coesa.
“Tá legal, já entendi a importância de escrever código limpo, mas e agora? Como eu faço isso?”, então, para tornar seus códigos mais limpos e coesos, existem uma série de regras que podem te ajudar nesse ponto, abaixo eu irei te ensinar as quatro principais para que você possa tornar seus códigos em obras de arte, vamos lá, pegue uma boa xícara de café e vamos começar!
Dê nomes certos aos bois.
Uma das coisas mais importantes que você deve fazer quando quiser manter um código limpo, é dar nomes auto-explicativos para variáveis, funções e classes. Acredite ou não, se você seguir só está regra você já vai ter um código muito mais legível. Quando você for definir nomes para novas variáveis, sempre tente colocar um nome que explique o que aquela variável “armazena”, e também evite utilizar siglas ou nomes muito curtos que não explicam o sentido geral da mesma. Além disso não tenha medo de nomes grandes, eles dão mais trabalho para escrever, mas ajudam bastante a tornar o seu código mais legível. Abaixo, veja um exemplo de um código com variáveis mal nomeadas:
var p = "Victor"; var x = 2017; var js = "Lima"; var aux = 1; console.log(p + " " + js + " está em " + (x + aux)); // Resultado Victor Lima está em 2018
Agora, veja um exemplo de código com as variáveis bem nomeadas:
var nome = "Victor"; var anoAtual = 2017; var sobrenome = "Lima"; console.log(nome + " " + sobrenome + " está em " + (anoAtual + 1)); // Resultado Victor Lima está em 2018
Como você pode ver, ambos os códigos apresentaram os mesmo resultado, mas o meu questionamento é, qual dos dois é mais fácil de entender?
Viu como um regra tão simples faz toda a diferença? A mesma coisa se aplica às classes(da orientação a objetos), quando você for definir uma nova classe é recomendado que o seu nome sempre seja referente a um substantivo, e que de fato explique o que aquela classe representa, além disso é uma boa prática os nomes de classe iniciarem com letras maiúsculas. Abaixo veja um exemplo de um nome de classe mal definido:
class cadastrar{ ... }
E agora, um nome de classe bem definido:
class Cadastro{ ... }
Apesar de haver pouca diferença, como podemos perceber o segundo exemplo é muito mais claro e coeso do que o primeiro, pois ele expressa melhor o que aquela classe representa. Além de variáveis e classes, você também pode melhor definir nomes para funções e métodos, uma das principais regras para isso é sempre tentar definir o nome deles como uma “ação”, veja o exemplo abaixo:
function cadastrarProduto(){...} function salvarNoBancoDeDados(){...} function salvarEmArquivo(dado){...}
Como você pode perceber cada nome está descrito como uma ação, geralmente um verbo. Além disso, sempre tente evitar utilizar substantivos em nomes de funções, pois, o nome de uma função deve sempre explicitar uma ação.
Se está repetindo demais, existe uma forma melhor de fazer!
Apesar da nomenclatura correta dos elementos em nossos códigos já ajudarem bastante o entendimento e a coesão, só isso não basta, ainda temos que aprender a evitar outros problemas, um deles é a repetição de código. De hoje em diante, você deve ter em mente que quando algum trecho de código está se repetindo demais em seu projeto, com certeza existe uma forma melhor de reproduzir esta repetição. Mas, antes de explorarmos formas de reduzir a repetição de código, vamos entender os problemas que podem acontecer quando você repete código.
Podemos dizer que existem dois grandes problemas em relação a isso, o primeiro é o inchaço do seu projeto, quanto mais você repete, maior e mais denso o seu código vai ficando, e isso dificulta muito a leitura de seu projeto. O segundo problema está relacionado ao processo de manutenção do seu programa, e para entender melhor esse ponto temos que contextualizar: “Digamos que você tem um trecho de código que serve para exibir a mensagem ‘Olá mundo’, e você o replica em 250 partes diferentes do seu software, enfim, digamos que no futuro você queira alterar essa mensagem para ‘Olá marte’ em todo o seu programa, sendo assim você teria que alterar a mensagem nas 250 partes diferentes onde você a replicou.”
Percebeu o problema? Alterar essas 250 mensagens em diferentes partes do seu projeto iria ser um processo muito cansativo, ineficiente e suscetível a erros. Então, em resumo, a repetição de código causa muitos problemas como esses, e uma das melhores formas para solucionar este empecilho é modularizando os trechos que se repetem do seu projeto em funções. Pois quando você faz isso, você centraliza toda a lógica daquele trecho dentro de uma função, e sempre que você quiser modificar esta lógica, basta modificá-la em um único ponto, na declaração da função, veja um exemplo prático desta situação abaixo:
function mensagem(){ console.log("Olá mundo"); } mensagem(); mensagem(); mensagem(); mensagem(); mensagem(); mensagem(); ...
E quando desejarmos alterar a mensagem, basta fazer como no exemplo de código abaixo:
function mensagem(){ console.log("Olá marte"); } mensagem(); mensagem(); mensagem(); mensagem(); mensagem(); mensagem(); ...
Comente sempre que possível, mas não exagere
Outra coisa que é de extrema importância para manter um código limpo, é comentar bem cada parte vital do seu software, porque fazendo isso você terá um projeto bem documentado, que vai facilitar muito o entendimento do código por outras pessoas e até mesmo por você, lembra daquela história de esquecer o código após um mês? Pois é, uma das formas de te ajudar a lembrar o que cada parte do programa faz é comentando bem o seu projeto. Porém, você não deve sair comentando toda linha de código, pois isso vai inflar a quantidade de linhas do seu projeto, tornando-o maçante e difícil de ler. Os comentários devem ser feitos de uma maneira objetiva e direta, veja abaixo um exemplo de código bem comentado:
/* Leitura da lista de nomes: Ao inicio do programa é feita uma leitura de todos os nomes nos arquivos names.csv e lastnames.csv em seguida estes nomes são adicionados à uma lista encadeada. */ NameList* firstNames = newNameList(); NameList* lastNames = newNameList(); parseNames("./generators/name/names.csv",firstNames); parseNames("./generators/name/lastnames.csv",lastNames);
Agora, veja um exemplo de um código muito mal comentado:
// Aqui eu importo a biblioteca de conexão com o banco de dados const sequelize = require("../core/Sequelize"); // Aqui eu importo a biblioteca de conexão com o banco de dados const Sequelize = require("Sequelize"); // Aqui eu inicio um novo model com o nome user const User = sequelize.define('user', { // aqui eu defino o primeiro atributo firstName que vai guardar o primeiro nome do usuário firstName: { // ele será do tipo string para armazenar um texto type: Sequelize.STRING }, // aqui eu defino o segundo atributo lastName que vai guardar o sobrenome nome do usuário lastName: { // ele será do tipo string para armazenar um texto type: Sequelize.STRING }, // aqui eu defino o terceiro atributo email que vai guardar o email do usuário email:{ // ele será do tipo string para armazenar um texto type: Sequelize.STRING }, // aqui eu defino o quarto atributo password que vai guardar a senha do usuário password:{ // ele será do tipo string para armazenar um texto type: Sequelize.STRING } }); // aqui eu exporto o model para utilizar em outros arquivos! module.exports = User;
Como você pode perceber, o código tem tantos comentários que fica difícil de ler e entender. Eu costumo falar que em relação a comentários, código é que nem piada, como assim? Pois bem, quando você tem que explicar uma piada é por que ela não foi tão boa, a mesma lógica se aplica aos comentários na programação, quando você tem que comentar exageradamente o seu código é por que ele não está bom, um trecho de código em si tem que expressar o seu próprio sentido quando lido, caso você tenha que explicar cada linha com comentários é por que o seu código não está legível.
Formatação do código
Uma coisa que muitos programadores não acham importante é a formatação do código, ou seja, a estrutura na qual o código foi escrito. Mas, acredite ou não, isso é uma das coisas que mais fazem diferença quando o assunto é código limpo. Um código bem formatado faz muita diferença pois ele é adaptado a forma de leitura dos seres humanos. E para manter um código bem estruturado existem duas principais dicas, que são, sempre idente o seu código, e nunca tenha linhas de código que sejam mais longas do que a sua tela.
Primeiramente você deve sempre identar o seu código quando você estiver trabalhando dentro de corpos de funções, com estruturas condicionais e com estruturas de repetição, pois dessa forma você consegue definir bem quais partes de um código pertencem a um determinado bloco, veja um exemplo de um código bem identado:
class Route{ constructor(method,name,controller){ this.method = method; this.name = name; this.controller = controller; } }
E agora, um exemplo de código mal identado:
var Route = require("./Route"); class Router{ constructor(){ } GET(path,controller){ return new Route(0,path,controller); }POST(path,controller){ return new Route(1, path,controller); } } module.exports = Router;
A diferença é muito clara, dependendo do tamanho do projeto, fica quase impossível de ler determinados códigos que não estão indentados. Além da má indentação, você deve também evitar linhas de códigos muito longas, pois isso também dificulta a leitura de um trecho de código, veja abaixo um claro exemplo disto:
it = this.itemFactory.create(iTemp.getName(),iTemp.getBarCode(),iTemp.getBrand(),iTemp.getInStock(),iTemp.getPrice(),iTemp.getType());
Se já é cansativo ler um única linha longa como esta, imagine um projeto que está repleto de linhas neste estilo? Esse é um dos fatores que mais contribuem para a poluição de um código, então daqui em diante tente sempre utilizar linhas curtas e diretas, se um linha ficar muito longa quebre-a em partes.
Conclusão
Quando você tem um código limpo e de fácil entendimento, você tem orgulho de mostrá-lo para qualquer um que queira lê-lo, seguindo todas estas quatro dicas mais afundo, o seu código vai deixar de ser linguagem de computador para se tornar algo mais próximo ao ser humano, facilitando os processos em equipe, a saúde de um software, e a velocidade de desenvolvimento de um projeto.