Codificação limpa

Muitas vezes são vistos códigos extremamente complexos e extensos, e por este motivo acima de tudo, este código deve ser o mais limpo possível e o ajudará a economizar recursos, tempo, dinheiro, manutenção. Por este motivo abaixo estão algumas dicas para uma codificação limpa.

1 - Resultados de condições booleanas

Um erro muito comum nas codificações envolve as condições booleanas para atribuir resultados, veja o exemplo abaixo:

if ValorTempo > 0 then   result := True else   result := False;

 

Este código pode ser substituído por apenas uma linha, facilitando até mesmo a interpretação da regra:

result := ValorTempo > 0;

 

2 - Negando a negação

Seja cauteloso no código para evitar condições que neguem negações:

if not VerificarClienteNaoEstaAtivo then

 

Ao ler este código, pensamos: “Espere aí… se a função avalia se o cliente não está ativo, mas tem um not… então a condição verifica se ele está ativo?!”. Sim! E se este é o caso, vale muito a pena reescrevê-la:

 

3 - Concatenação de strings

É comum encontramos códigos como esse:

 

Observe que há 4 operadores de adição (+) utilizados para concatenar o texto, dificultando a visualização do texto como um todo. Na verdade, essa dificuldade é exponencial. Quanto mais operadores existirem, mais difícil será a visualização.

Para evitar o uso demasiado deste operador, basta recorrer à função Format que é nativa do compilador e que permite declarar um texto com parâmetros e preenchê-los em um array:

 

4 - Incrementar/Decrementar valores

Podemos incrementar ou decrementar uma variável dessa forma:

 

Contudo, considere a utilização das funções Inc e Dec, presentes no Delphi desde suas primeiras versões:

 

5 - Condições if aninhadas

Algumas vezes tende-se a trabalhar sempre com resultados verdadeiros em condições if.

 

Essas condições aninhadas exigem a construção de uma “sequência lógica” em nossa memória para que possamos acompanhar o fluxo de execução. Entretanto, em certo ponto, naturalmente nos perdemos em meio à tantas condições, que se agravam ainda mais quando há fluxos alternativos (else).

Para “limpar” este código, pode-se empregar condições de guarda com instruções de saída do método:

 

 

6 - Chamadas repetidas com longos namespaces

Já encontrei códigos parecidos com este:

 

Para a leitura, é muito mais cômodo atribuir parte dos namespaces à uma variável e utilizá-la nas instruções seguintes:

 

7 - Tipos de dados inadequados

Cada tipo de dado usa uma porção de espaço na memória. Por exemplo, o tipo integer ocupa 4 bytes devido à sua dimensão, que pode atingir um valor de até pouco mais de 2 bilhões. Pensando assim, será que faz sentido criar uma variável que se refere a um dia do mês como integer?

 

Sabe-se que o valor máximo para o dia do mês é 31, então se o tipo integer passa de 2 bilhões, o espaço total alocado na memória jamais será utilizado. Então a recomendação é que seja substituído o integer pelo byte.

Atualmente os computadores possuem alta capacidade de memória e que detalhes como este do tipo ideal de dados podem ser ignorados. Porém, lembre-se que a sua aplicação declara, preenche e acessa variáveis a todo momento, incontáveis vezes por dia.

Então, quanto menos memória uma aplicação exige durante a sua execução, melhor será o aproveitamento de recursos do sistema operacional para outras tarefas e diminuíra a chance de Overflow, travamentos e Out of Memory em determinado momento, dependendo do uso.

Para mais informações sobre o limite de valores de cada tipo, acesse https://docwiki.embarcadero.com/RADStudio/Sydney/en/Simple_Types_(Delphi)#Integer_Types