Zoeken…


Variabele namen

Variabelen bevatten gegevens. Noem ze naar waar ze voor worden gebruikt, niet naar hun gegevenstype of bereik, met een zelfstandig naamwoord . Als u voel me verplicht om het nummer van uw variabelen (bijvoorbeeld thing1, thing2, thing3 ), dan overwegen gebruik te maken van een geschikte datastructuur plaats (bijvoorbeeld een array, een Collection of een Dictionary ).

Namen van variabelen die een iteratable set van waarden vertegenwoordigen - bijvoorbeeld een array, een Collection , een Dictionary , of een Range van cellen, moet meervoud zijn.

Enkele veel voorkomende VBA-naamgevingsconventies zijn als volgt:


Voor variabelen op procedureniveau :

camelCase

Public Sub ExampleNaming(ByVal inputValue As Long, ByRef inputVariable As Long)

    Dim procedureVariable As Long
    Dim someOtherVariable As String

End Sub

Voor variabelen op moduleniveau:

PascalCase

Public GlobalVariable As Long
Private ModuleVariable As String

Voor constanten:

SHOUTY_SNAKE_CASE wordt vaak gebruikt om constanten te onderscheiden van variabelen:

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

PascalCase namen zorgen echter voor schonere code en zijn net zo goed, gezien IntelliSense verschillende pictogrammen gebruikt voor variabelen en constanten:

IntelliSense met verschillende pictogrammen voor constante Foo en variabele balk


Hongaarse notatie

Noem ze naar waar ze voor worden gebruikt, niet naar hun gegevenstype of bereik.

"Hongaarse notatie maakt het gemakkelijker om te zien wat het type van een variabele is"

Als u uw code schrijft, zoals procedures die zich houden aan het beginsel van een enkele verantwoordelijkheid (zoals het hoort), moet u nooit naar een scherm vol variabele verklaringen bovenaan een procedure kijken; declareer variabelen zo dicht mogelijk bij hun eerste gebruik, en hun gegevenstype zal altijd duidelijk zichtbaar zijn als u ze met een expliciet type declareert. De sneltoets Ctrl + i van de VBE kan ook worden gebruikt om het type variabele in een knopinfo weer te geven.

Waar een variabele voor wordt gebruikt, is veel nuttiger informatie dan het gegevenstype, vooral in een taal zoals VBA die een type gelukkig en impliciet naar een ander converteert als dat nodig is.

Overweeg iFile en strFile in dit voorbeeld:

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

Vergelijk met:

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 wordt in het bovenste voorbeeld door ByRef doorgegeven, maar ByRef van het feit dat we het geluk hebben om te zien dat het expliciet als zodanig is doorgegeven, is er geen indicatie dat strData daadwerkelijk wordt geretourneerd door de functie.

Het onderste voorbeeld noemt het outContent ; dit out prefix is wat Hongaarse Notation werd uitgevonden voor: om hulp te verduidelijken wat een variabele wordt gebruikt voor, in dit geval om duidelijk te identificeren als een "out" parameter.

Dit is handig, omdat IntelliSense op zichzelf ByRef niet weergeeft, zelfs wanneer de parameter expliciet door verwijzing wordt doorgegeven:

IntelliSense met "CanReadFile (ByVal-pad als String, outComment As String) As Boolean" wanneer de werkelijke handtekening outComment aangeeft als expliciet doorgegeven door verwijzing ("ByRef")

Wat leidt tot...

Hongaars goed gedaan

De Hongaarse notatie had oorspronkelijk niets te maken met variabele typen . In feite is de Hongaarse notatie goed gedaan eigenlijk nuttig. Beschouw dit kleine voorbeeld ( ByVal en As Integer verwijderd voor kort):

Public Sub Copy(iX1, iY1, iX2, iY2)
End Sub

Vergelijk met:

Public Sub Copy(srcColumn, srcRow, dstColumn, dstRow)
End Sub

src en dst zijn hier Hongaarse notatie- voorvoegsels en ze geven nuttige informatie die anders niet al kan worden afgeleid uit de parameternamen of IntelliSense die ons het aangegeven type tonen.

Natuurlijk is er een betere manier om alles over te brengen, met behulp van de juiste abstractie en echte woorden die hardop kunnen worden uitgesproken en zinvol zijn - als een gekunsteld voorbeeld:

Type Coordinate
    RowIndex As Long
    ColumnIndex As Long
End Type

Sub Copy(source As Coordinate, destination As Coordinate)
End Sub

Procedure namen

Procedures doen iets . Noem ze naar wat ze doen, met behulp van een werkwoord . Als het niet mogelijk is om een procedure nauwkeurig te benoemen, doet de procedure waarschijnlijk te veel dingen en moet deze worden onderverdeeld in kleinere, meer gespecialiseerde procedures.

Enkele veel voorkomende VBA-naamgevingsconventies zijn als volgt:


Voor alle procedures:

PascalCase

Public Sub DoThing()

End Sub

Private Function ReturnSomeValue() As [DataType]

End Function

Voor procedures voor evenementafhandeling:

ObjectName_EventName

Public Sub Workbook_Open()

End Sub

Public Sub Button1_Click()

End Sub

Gebeurtenishandlers worden meestal automatisch benoemd door de VBE; door ze te hernoemen zonder het object en / of de afgehandelde gebeurtenis te hernoemen, wordt de code verbroken - de code wordt uitgevoerd en gecompileerd, maar de handlerprocedure wordt verweesd en wordt nooit uitgevoerd.

Booleaanse leden

Overweeg een Booleaanse terugkeerfunctie:

Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
End Function

Vergelijk met:

Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
End Function

De Can prefix heeft dienen hetzelfde doel als de b prefix: het identificeert de functie return waarde als een Boolean . Maar Can leest beter dan b :

If CanReadFile(path, content) Then

Vergeleken bij:

If bReadFile(strFile, strData) Then

Overweeg het gebruik van voorvoegsels zoals Can , Is of Has voor Booleaanse terugkerende leden (functies en eigenschappen), maar alleen wanneer het waarde toevoegt. Dit voldoet aan de huidige Microsoft-richtlijnen voor naamgeving .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow