Os nomes utilizados em variáveis, métodos e funções são partes importantes do código para se guardar informação e não devem ser desperdiçados com palavras “vazias”. Eles podem ser utilizados como uma forma simples de comentários.
É importante evitar ambiguidade e escolher palavras bem específicas.
Exemplo:
Class BinaryTree
Method New() Constructor
Method GetSize()
.
.
.
EndClass
O que se pode esperar do método getSize() ? A altura da árvore, o número de nós ou a quantidade de bytes que ela ocupa na memória?
Para evitar isso alguns nomes seriam mais precisos, como Height(), NumNodes(), SizeBytes()
Nomes genéricos como “temp” e “Ret” devem ser evitados dependendo do contexto.
Exemplo:
#INCLUDE "TOTVS.CH"
Function RaizDoQuad(aValores)
Local nTemp := 0
Local nRet := 0
Local nX := 0
For nX := 1 to Len(aValores)
nTemp += aValores[nX] * aValores[nX]
Next
nRet := SqRt(nTemp)
Return nRet
No lugar de nTemp, um nome muito mais claro seria nSomaQuad.
Imaginando que acidentalmente a expressão ficasse: nTemp += aValores[nX], seria muito mais fácil de perceber o erro se a variável tivesse no nome o seu significado.
nSomaQuad += aValores[nX]
Dessa forma é muito mais intuitivo perceber que tem algo errado com a linha, já que a variável sugere (apenas pelo nome) que ela deveria conter a soma dos quadrados.
Porém, em alguns casos é totalmente viável utilizar nomes desse tipo.
Exemplo:
#INCLUDE "TOTVS.CH"
Function OrdenaVal(nValor1, nValor2)
Local nTemp := 0
IF (nValor2 < nValor1)
nTemp = nValor2
nValor2 = nValor1
nValor1 = nTemp
Return
Neste caso a variável serve justamente como temporária para troca de valores entre duas variáveis.
Para incrementos de loops, a tendência seria utilizar letras vagas como “i”, “j”,”k”. Mas com um pouco mais de cuidado na hora de escolher o nome, pode-se colocar muito mais informação e facilitar a detecção de pequenos bugs no código.
Exemplo:
#INCLUDE "TOTVS.CH"
Function CliLoop()
Local nI := 0
Local nJ := 0
Local nZ := 0
For nI := 1 to Len(aClientes)
ConOut("Cliente: " + aClientes[nI])
For nJ := 1 to Len(aClientes[nI])
ConOut("Pedido: " + aClientes[nI][nJ])
For nZ := 1 to Len(aClientes[nI][nJ]
ConOut("Itens: " + aClientes[nI][nJ][nZ])
Next
Next
Next
Return
Seria muito mais claro utilizar alguns nomes mais sugestivo, principalmente para encontrar facilmente uma troca acidental das variáveis.
#INCLUDE "TOTVS.CH"
Function CliLoop()
Local nCli := 0
Local nPed := 0
Local nIt := 0
For nCli := 1 to Len(aClientes)
ConOut("Cliente: " + aClientes[nCli])
For nPed := 1 to Len(aClientes[nCli])
ConOut("Pedido: " + aClientes[nPed][nCli])
For nIt := 1 to Len(aClientes[nCli][nPed]
ConOut("Itens: " + aClientes[nCli][nPed][nIt])
Next
Next
Next
Return
Quando o escopo é muito curto não há problema em utilizar incrementos com apenas uma ou duas letras, mas se o escopo for grande, o leitor terá que criar um mapa mental para traduzir o nome das variáveis no que elas realmente significam. Quando o correto seria a variável já possuir no nome o seu significado.