Árvore de páginas

Los nombres utilizados en las variables, métodos y funciones son partes importantes del código para guardar información y no deben desperdiciarse con palabras "vacías". Pueden utilizarse como una forma simple de comentarios.

 


Es importante evitar la ambigüedad y seleccionar palabras bien específicas.

 

 
Ejemplo:
Class BinaryTree
Method New() Constructor
Method GetSize()
.
.
.
ENDCLASS
¿Qué se puede esperar del método getSize() ? La altura del árbol, el número de nudos o la cantidad de bytes que ocupa en la memoria?
Para evitar esto, algunos nombres deberían ser más exactos, como Height(), NumNodes(), SizeBytes()
Nombres genéricos como "temp" y "Ret" deben evitarse dependiendo del contexto.
Ejemplo:
#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
En lugar de nTemp, un nombre mucho más claro sería nSomaQuad.
Si imaginamos que accidentalmente la expresión queda así: nTemp += aValores[nX], sería mucho más fácil de notar el error si la variable tuviera el nombre o su significado.
nSomaQuad += aValores[nX]
De esta manera, es mucho más intuitivo notar que hay algo equivocado con la línea, ya que la variable sugiere (simplemente por el nombre) que esta debe tener la suma de los cuadrados.
Sin embargo, en algunos casos es totalmente viable utilizar nombres de este tipo.
Ejemplo:
#INCLUDE "TOTVS.CH"
Function OrdenaVal(nValor1, nValor2)
Local nTemp := 0
IF (nValor2 < nValor1)
nTemp = nValor2
nValor2 = nValor1
nValor1 = nTemp
Return
En este caso, la variable sirve justamente como temporal para el intercambio de valores entre dos variables.
Para incrementos de bucles, la tendencia sería utilizar letras disponibles como "i", "j","k". Pero con un poco más de cuidado a la hora de elegir el nombre, puede ponerse mucha más información y facilitar la detección de pequeños bugs en el código.
Ejemplo:
#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("Ítems: " + aClientes[nI][nJ][nZ])
Next
Next
Next
Return
Quedaría mucho más claro si se utilizan algunos nombres más explícitos, principalmente para identificar fácilmente un intercambio accidental de variables.
#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("Ítems: " + aClientes[nCli][nPed][nIt])
Next
Next
Next
Return

 

Cuando el alcance es mucho más corto es posible utilizar aumentos con solo una o dos letras, pero si el alcance es grande, el lector tendrá que crear un mapa mental para traducir el nombre de las variables en lo que realmente significan. Cuando lo correcto sería que la variable llevara en su nombre su significado.

  • Sem rótulos