Bonjour a tous et merci de votre temps et de vos avis.
En lisant un article sur MS SQL et comment proteger son code contre les modif, j'ai recoise la notion de parametres nommes qui existe aussi en VBA.
Et j'ai fait le test suivant :
1 2 3 4 5 6 7
| Private Sub Test()
Call aSub("T1", "T2")
Call aSub(prm1:="T1", prm2:="T2")
Call aSub(prm2:="T2", prm1:="T1")
End Sub |
1 2 3
| Private Sub aSub(prm1 As Variant, prm2 As Variant)
Debug.Print "prm1="; prm1, "prm2="; prm2
End Sub |
A+
Et obtenu le resutat suivant :
- prm1=T1 prm2=T2
- prm1=T1 prm2=T2
- prm1=T1 prm2=T2
Comme vous le voyez sur la derniere ligne de Test, les parametres nommes sont inverses par rapport a la signature.
Certe cela met le code a l'abris de changements du type :
Private Sub aSub(prm0 as varuiant, prm1 As Variant, prm2 As Variant)
mais quand on tape du code l'intellisens on va voir aSub(prm0, prm1, prm2) et je ne suis pas certain qu'on realisera que le 1er parametre est non seulement le 2ieme mais qu'il ne correspond pas au premier affiche par Intellisens.
Un des avantages colateral serait aussi le contournement de la limitation sur les parametres optionels qui doivent obligatoirement etre en dernier alosr que justement on souhaiterai que ce soit les derniers parametres qui soient obligatoires.
On pourrait avoir :
Public Function ConcatenatedTokenFromTo(prmSeparator As String, Optional prmStartIndex As Variant, Optional prmEndIndex As Variant) As String
et faire un appel du type :
ConcatenatedTokenFromTo(prmStartIndex:=2, prmEndIndex:=8, prmSeparator :=", ")
ConcatenatedTokenFromTo(prmStartIndex:=2, prmSeparator :=", ")
ConcatenatedTokenFromTo(prmEndIndex:=8, prmSeparator :=", ")
Car il est plus logique de specifier le separateur apres les bornes qu'avant.
Pensez-vous qu'on devrait encourager l'usage des parametres nommes pour un code plus resistant aux changements ?
A+
Partager