VBA
Convenciones de nombres
Buscar..
Nombres de variables
Las variables mantienen los datos. Nómbrelos con el nombre para el que se usan, no con su tipo de datos o alcance, usando un nombre . Si se siente obligado a numerar sus variables (por ejemplo thing1, thing2, thing3
), entonces considere usar una estructura de datos apropiada en su lugar (por ejemplo, una matriz, una Collection
o un Dictionary
).
Los nombres de las variables que representan un conjunto de valores iterativo, por ejemplo, una matriz, una Collection
, un Dictionary
o un Range
de celdas, deben ser plurales.
Algunas convenciones comunes de nomenclatura de VBA van así:
Para variables de nivel de procedimiento :
camelCase
Public Sub ExampleNaming(ByVal inputValue As Long, ByRef inputVariable As Long)
Dim procedureVariable As Long
Dim someOtherVariable As String
End Sub
Para las variables de nivel de módulo:
PascalCase
Public GlobalVariable As Long
Private ModuleVariable As String
Para constantes:
SHOUTY_SNAKE_CASE
se usa comúnmente para diferenciar constantes de variables:
Public Const GLOBAL_CONSTANT As String = "Project Version #1.000.000.001"
Private Const MODULE_CONSTANT As String = "Something relevant to this Module"
Public Sub SomeProcedure()
Const PROCEDURE_CONSTANT As Long = 10
End Sub
Sin embargo, los nombres de PascalCase
hacen que el código tenga un aspecto más PascalCase
y sean tan buenos, dado que IntelliSense usa diferentes íconos para variables y constantes:
Notación húngara
Asígnele un nombre según su uso, no después de su tipo de datos o alcance.
"La notación húngara hace que sea más fácil ver cuál es el tipo de variable"
Si escribe su código, como los procedimientos se adhieren al Principio de Responsabilidad Única (como debería ser), nunca debe mirar una serie de declaraciones de variables en la parte superior de cualquier procedimiento; declare las variables lo más cerca posible de su primer uso, y su tipo de datos siempre estará a la vista si los declara con un tipo explícito. El acceso directo Ctrl + i de VBE también se puede usar para mostrar el tipo de una variable en una información sobre herramientas.
Para lo que se usa una variable es mucho más información útil que su tipo de datos, especialmente en un lenguaje como VBA que convierte feliz e implícitamente un tipo en otro según sea necesario.
Considere iFile
y strFile
en este ejemplo:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
Dim bRetVal As Boolean
Dim iFile As Integer
On Error GoTo CleanFail
iFile = FreeFile
Open strFile For Input As #iFile
Input #iFile, strData
bRetVal = True
CleanExit:
Close #iFile
bReadFile = bRetVal
Exit Function
CleanFail:
bRetVal = False
Resume CleanExit
End Function
Comparar con:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
On Error GoTo CleanFail
Dim handle As Integer
handle = FreeFile
Open path For Input As #handle
Input #handle, outContent
Dim result As Boolean
result = True
CleanExit:
Close #handle
CanReadFile = result
Exit Function
CleanFail:
result = False
Resume CleanExit
End Function
strData
se pasa ByRef
en el ejemplo de arriba, pero junto al hecho de que tenemos la suerte de ver que se pasa explícitamente como tal, no hay ninguna indicación de que strData
está realmente devuelto por la función.
El ejemplo de abajo lo nombra fuera de outContent
; este prefijo de out
es para lo que se inventó la notación húngara: para ayudar a aclarar para qué se utiliza una variable , en este caso para identificarla claramente como un parámetro "fuera".
Esto es útil, porque IntelliSense por sí mismo no muestra ByRef
, incluso cuando el parámetro se pasa explícitamente por referencia:
Lo que lleva a...
Húngaro Hecho a la derecha
La notación húngara originalmente no tenía nada que ver con tipos de variables . De hecho, la notación húngara hecha correctamente es realmente útil. Considere este pequeño ejemplo ( ByVal
y As Integer
eliminado por brevedad):
Public Sub Copy(iX1, iY1, iX2, iY2)
End Sub
Comparar con:
Public Sub Copy(srcColumn, srcRow, dstColumn, dstRow)
End Sub
src
y dst
son los prefijos de notación húngara aquí, y transmiten información útil que de otra manera no se puede inferir de los nombres de parámetros o IntelliSense que nos muestra el tipo declarado.
Por supuesto, hay una mejor manera de transmitirlo todo, mediante una abstracción adecuada y palabras reales que se pueden pronunciar en voz alta y tiene sentido, como un ejemplo artificial:
Type Coordinate
RowIndex As Long
ColumnIndex As Long
End Type
Sub Copy(source As Coordinate, destination As Coordinate)
End Sub
Nombres de procedimientos
Los procedimientos hacen algo . Nómbrelos después de lo que están haciendo, usando un verbo . Si no es posible nombrar con precisión un procedimiento, es probable que el procedimiento esté haciendo demasiadas cosas y deba dividirse en procedimientos más pequeños y más especializados.
Algunas convenciones comunes de nomenclatura de VBA van así:
Para todos los procedimientos:
PascalCase
Public Sub DoThing()
End Sub
Private Function ReturnSomeValue() As [DataType]
End Function
Para procedimientos de manejo de eventos:
ObjectName_EventName
Public Sub Workbook_Open()
End Sub
Public Sub Button1_Click()
End Sub
Los manejadores de eventos generalmente son nombrados automáticamente por el VBE; el cambio de nombre sin cambiar el nombre del objeto y / o el evento manejado romperá el código; el código se ejecutará y compilará, pero el procedimiento del controlador quedará huérfano y nunca se ejecutará.
Miembros booleanos
Considere una función de retorno booleano:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
End Function
Comparar con:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
End Function
El prefijo Can
tiene el mismo propósito que el prefijo b
: identifica el valor de retorno de la función como Boolean
. Pero Can
leer mejor que b
:
If CanReadFile(path, content) Then
Comparado con:
If bReadFile(strFile, strData) Then
Considere el uso de prefijos como Can
, Is
o Has
delante de los miembros que regresan a Boolean (funciones y propiedades), pero solo cuando agrega valor. Esto cumple con las directrices actuales de nomenclatura de Microsoft .