Recherche…


Noms variables

Les variables contiennent des données. Nommez-les après ce qu'ils ont utilisé, pas après leur type de données ou leur étendue, en utilisant un nom . Si vous vous sentez obligé de numéroter vos variables (par exemple, thing1, thing2, thing3 ), envisagez plutôt d'utiliser une structure de données appropriée (par exemple, un tableau, une Collection ou un Dictionary ).

Les noms des variables qui représentent un ensemble de valeurs itérables - par exemple, un tableau, une Collection , un Dictionary ou une Range de cellules, doivent être au pluriel.

Certaines conventions de nommage VBA courantes vont donc:


Pour les variables de niveau procédure :

camelCase

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

    Dim procedureVariable As Long
    Dim someOtherVariable As String

End Sub

Pour les variables de niveau module:

PascalCase

Public GlobalVariable As Long
Private ModuleVariable As String

Pour les constantes:

SHOUTY_SNAKE_CASE est couramment utilisé pour différencier les constantes des 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

Cependant, les noms PascalCase font un code plus propre et sont tout aussi bons, étant donné qu'IntelliSense utilise des icônes différentes pour les variables et les constantes:

IntelliSense utilisant différentes icônes pour Foo constant et variable Bar


Notation hongroise

Nommez-les après leur utilisation, et non après leur type de données ou leur étendue.

"La notation hongroise permet de voir plus facilement le type d'une variable"

Si vous écrivez votre code tel que les procédures respectent le principe de la responsabilité unique (comme il se doit), vous ne devriez jamais regarder un écran de déclarations de variables en tête de procédure; déclare les variables aussi proches que possible de leur première utilisation et leur type de données sera toujours visible si vous les déclarez avec un type explicite. Le raccourci Ctrl + i du VBE peut également être utilisé pour afficher le type d'une variable dans une info-bulle.

A quoi sert une variable est beaucoup plus d'informations utiles que son type de données, en particulier dans un langage tel que VBA qui convertit joyeusement et implicitement un type en un autre si nécessaire.

Considérez iFile et strFile dans cet exemple:

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

Comparer aux:

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 est passé ByRef dans le premier exemple, mais à part le fait que nous avons la chance de voir qu'il est explicitement passé en tant que tel, rien n'indique que strData soit réellement renvoyé par la fonction.

L'exemple inférieur le nomme outContent ; ce préfixe out est ce que la notation hongroise a été inventée pour: aider à clarifier à quoi sert une variable , dans ce cas-ci pour l'identifier clairement comme un paramètre "out".

Ceci est utile, car IntelliSense en lui-même n'affiche pas ByRef , même si le paramètre est explicitement passé par référence:

IntelliSense affichant "CanReadFile (chemin ByVal As String, outComment As String) comme booléen" lorsque la signature actuelle spécifie outComment comme indiqué explicitement par référence ("ByRef")

Qui conduit à...

Hongrois Fait Bien

La notation hongroise n'avait à l'origine rien à voir avec les types de variables . En fait, la notation hongroise faite correctement est réellement utile. Considérez ce petit exemple ( ByVal et As Integer supprimés pour des raisons de brièveté):

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

Comparer aux:

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

src et dst sont les préfixes de notation hongrois ici, et ils transmettent des informations utiles qui ne peuvent pas déjà être déduites des noms de paramètres ou d'IntelliSense, nous indiquant le type déclaré.

Bien sûr, il existe un meilleur moyen de tout transmettre, en utilisant une abstraction correcte et des mots réels qui peuvent être prononcés à haute voix et qui ont du sens - comme un exemple artificiel:

Type Coordinate
    RowIndex As Long
    ColumnIndex As Long
End Type

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

Noms de procédure

Les procédures font quelque chose . Nommez-les après ce qu'ils font, en utilisant un verbe . S'il est impossible de nommer avec précision une procédure, il est probable que la procédure fait trop de choses et doit être divisée en procédures plus petites et plus spécialisées.

Certaines conventions de nommage VBA courantes vont donc:


Pour toutes les procédures:

PascalCase

Public Sub DoThing()

End Sub

Private Function ReturnSomeValue() As [DataType]

End Function

Pour les procédures de gestionnaire d'événement:

ObjectName_EventName

Public Sub Workbook_Open()

End Sub

Public Sub Button1_Click()

End Sub

Les gestionnaires d'événements sont généralement nommés automatiquement par le VBE; les renommer sans renommer l'objet et / ou l'événement manipulé cassera le code - le code s'exécutera et se compilera, mais la procédure du gestionnaire sera orpheline et ne sera jamais exécutée.

Membres booléens

Considérons une fonction booléenne:

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

Comparer aux:

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

Le Can préfixe ne sert le même but que le b préfixe: il identifie la valeur de retour de la fonction comme Boolean . Mais Can lit mieux que b :

If CanReadFile(path, content) Then

Par rapport à:

If bReadFile(strFile, strData) Then

Envisagez d'utiliser des préfixes tels que Can , Is ou Has devant les membres renvoyant des booléens (fonctions et propriétés), mais uniquement lorsque cela ajoute de la valeur. Cela est conforme aux directives de dénomination actuelles de Microsoft .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow