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:

IntelliSense usando diferentes iconos para Foo constante y barra variable


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:

IntelliSense que muestra "CanReadFile (ByVal path As String, outComment As String) como Boolean" cuando la firma real especifica outComment como explícitamente se pasa por referencia ("ByRef")

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 .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow