CodeS-SourceS
Rechercher un code, un tuto, une réponse

Byref et byval sans douleur

Septembre 2017


ByRef et ByVal sans douleur


Devant la confusion sur le sujet de ByRef et ByVal, j'ai décidé d'expérimenter un peu et de faire le débroussaillage.


Voici les résultats de mes tests. Seuls les tests ayant donnés des résultats pertinents sont notés ici.

Le fait que l'appel soit une Function ou une Sub ne fait pas de différence puisque les variables examinées sont les valeurs transmises. Le comportement des valeurs retournées par une fonction est bien connu.

Tout d'abord, j'ai utilisé deux Sub type.


'
Private Sub CallSubByVal(ByVal nInt as Integer)
    nInt = nInt  * 10
End Sub

Private Sub CallSubByRef(ByRef nInt as Integer)
    nInt = nInt  * 10
End Sub


Examinons les résultats:

Dim nVal as Integer

nVal=10
CallSubByVal nVal
'Debug.Print nVal :  10

nVal=10
CallSubByRef nVal
'Debug.Print nVal :  100


Pas de surprise.

Mais lisez. Et voyez l'effet des parenthèses.

nVal=10
CallSubByRef (nVal)
'Debug.Print nVal :  10


Ces parenthèses forcent le passage ByVal même si elle est spécifiée ByRef.

Certains utilisent la convention "Call FunctionName..." dans le code.

Voyons l'effet.

nVal=10
Call CallSubByRef (nVal)
'Debug.Print nVal :  100


Le mot-clé "Call" nécessite l'utilisation des parenthèses pour encadrer la valeur passée.

Pour avoir à nouveau l'effet parenthèses, il faut les doubler.

nVal=10
Call CallSubByRef ((nVal))
'Debug.Print nVal :  10


J'espère que ces éclaircissements pourront vous être utiles

A voir également

Publié par bitshifter.
Ce document intitulé «  Byref et byval sans douleur  » issu de CodeS-SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Manipuler des fichiers excel sous vb6 sans référencer excel et sans laisser de processus dans le gestionnaire des taches
Langue arabe ou sinon çáúñèí