Boas Práticas – Identação e Nomenclaturas

Seguindo a linha das boas práticas, adotar um padrão de codificação e organização de código ajuda muito a compreensão do código e de sua funcionalidade. Estas técnicas existem em todas as linguagens de mercado, e independente do padrão adotado, é uma boa prática ter um padrão. Vou enumerar neste post apenas duas práticas importantes, que embora sejam aplicáveis à maioria das linguagens de mercado, serão vistas com enfoque na linguagem ADVPL: Identação e nomenclatura de variáveis e constantes.

Tornar o código mais facilmente legível usando padrões e boas práticas de desenvolvimento aumenta a legibilidade do código e facilita a compreensão do mesmo pelos outros integrantes da equipe, e vai permitir que você saia de férias sem que seu telefone pareça a campainha de intervalo de aulas da escola (tocando a cada 45 minutos).

Identação

Cada um têm seu gosto, e gosto não se discute. Mas quando se trabalha em equipe, manter um padrão de identação único e configurado e aplicado da mesma forma em todo o código, deixa o código mais bonito e legível. Tanto faz se a identação será tabulada ou com espaços, desde que seja igual para todos. Existem editores de código configuráveis, inclusive com opção de refatoração apenas da identação, com opções pré-configuradas para múltiplas linguagens. Normalmente eu utilizo identação com dois espaços em branco, para legibilidade de código em múltiplas plataformas ou editores com menos recursos gráficos. Pra mim, este tamanho é mais que suficiente para ser perceptível sem afastar demais os códigos horizontalmente.

Porém, se eu vou dar manutenção em um projeto onde todos os fontes foram identados usando outro padrão, eu confirmo se este é o padrão a ser mantido, e ao dar manutenção eu respeito o padrão já existente. Não existe o padrão certo ou o errado, existe o que melhor atende a necessidade da equipe que o utiliza. O grande pecado na minha opinião é não identar o código.

Nomenclatura de variáveis e constantes

Embora o ADVPL permita que cada variável seja declarada sem um tipo específico, e durante a execução do código uma variável possa receber qualquer tipo de conteúdo por atribuição, normalmente as funções e rotinas criadas recebem parâmetros normalmente de um mesmo tipo, e dentro das funções as variáveis locais costumam também receber um tipo único de valor durante sua execução, logo é uma boa pratica prefixar as variáveis do código com pelo menos uma letra minúscula indicando o seu tipo, seguida por um nome legível relacionado diretamente com o seu conteúdo, usando letras maiúsculas na primeira letra do nome da variável, e nas demais letras que iniciem um nome composto, respeitando o limite de caracteres da linguagem em questão.

Um complemento ao prefixo pode ser acrescentado, no caso de funções que utilizam variáveis de escopos diferentes, para identificar o escopo da variável. No Advpl por exemplo, podemos ter variáveis de escopo LOCAL, PRIVATE, STATIC e PUBLIC. Todos os parâmetros declarados de uma função por padrão são LOCAL, e dentro do corpo da função podemos declarar variáveis LOCAL, PRIVATE e PUBLIC, e ainda fora do corpo da função, mas dentro do mesmo arquivo-fonte, podemos declarar variáveis STATIC, e acessá-las dentro de qualquer função daquele fonte. Assumindo que todas as variáveis locais sejam prefixadas apenas com o tipo da informação que ela deve conter, pode-se prefixar as variáveis STATIC com o prefixo “s”, PRIVATE com prefixo “p” e PUBLIC com “g”, seguidas da letra que identifica o tipo da variável, seguida pelo nome efetivo da varíavel, utilizando as letras significativas do nome em maiúsculo. Eu já ví fontes onde até mesmo as variáveis declaradas explicitamente dentro de uma função recebem um prefixo “l” (L minúsculo), para ser fácil diferenciar de uma variável que foi recebida como parâmetro, que também têm escopo local. Já para constantes ou #defines, podemos por exemplo prefixar com o tipo seguido do nome da constante, e para esta nomenclatura ser diferente das variáveis locais, colocamos todas as letras maiúsculas.

Por exemplo, na linguagem ADVPL podemos ter os tipos A ( Array ) , C ( Caractere ) , D ( Data ) , N ( Numérico de ponto flutuante ), F ( Numérico com precisão Fixa ), L ( Lógico ) , B ( Bloco de Código ) e O ( Objeto ).  Seguindo uma determinação purista, se dentro do corpo de uma função você encontra as variáveis abaixo, rapidamente é possível concluir seu escopo e tipo de dado esperado, e ter uma idéia de seu conteúdo:

lnValTemp // LOCAL, numérica
lnSubtot // LOCAL, numérica
aItensVend // LOCAL (parametro), Array
nFatorMult // LOCAL (parametro), numérico
slBlind // STATIC, lógica
pcCpoTit // PRIVATE, caractere
gcMsgExit // PUBLIC, caractere

Note que as duas primeiras letras identificam o escopo e o tipo da variável, isto fica claro, mas nem sempre o nome vai lhe revelar logo de cara tudo o que você precisa saber sobre a variável, mas vai lhe dar uma boa ideia. Basta dar uma olhada na documentação no cabeçalho da função (outra boa prática, que veremos em mais detalhes em um outro post) ou dentro do corpo da função, para ver onde e como a variável é utilizada. O nome já lhe dá uma ideia, ver o fonte apenas esclarece a funcionalidade.

E, novamente, independentemente do padrão adotado, é elegante que ele seja único. Caso um padrão seja adotado ou alterado, isto deve ser uma decisão acertada e alinhada com a equipe, para que todos remarem na mesma direção. E, se você já têm uma porção de código já escrita, não precisa sair alterando e refatorando tudo, isto deve ser feito com calma para não gerar mais retrabalho ou efeitos colaterais, e pode demandar um tempo que você não têm na cartola. Isto pode muito bem ser feito sob demanda, quando o código receber manutenções de correção ou melhoria.

E, por hoje é só, pessoal !! Até o próximo post 🙂

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s