[VB6] ByVal ou ByRéf ?

ByVal ou ByRéf ? [VB6] - Programmation

Marsh Posté le 16-03-2001 à 09:22:06    

j'ai beau lire et relire la doc, je vois bien la différence qu'il y a entre ces deux options, mais je ne vois toujours pas l'UTILITE !
 
Dans quel cas privilégier l'un ou l'autre ?

 

[edit]--Message édité par Hepil--[/edit]

Reply

Marsh Posté le 16-03-2001 à 09:22:06   

Reply

Marsh Posté le 16-03-2001 à 16:55:00    

Salut,
 
La difference est fondamentale.
 
Quand tu passes la variable par valeur, meme si tu fais des manipulation sur celle-ci dans ta fonction(procedure), apres la retour dans ton code appelant, la valeur n'est pas modifiee. Quand tu passe la variable par referance , toute modification de celle ci se retrouvera a la sortie de la fonction.
 
 
A+
 
Raphael


---------------
*******************************************
Reply

Marsh Posté le 16-03-2001 à 19:11:33    

Je sais pas si tu as fais du pascal déjà mais ça reviens à passer la variable par valeur ou par adresse.
Par défaut il me sembler que VB utilise ByVal, ça ne sert donc à rien de le mettre. Par contre en ByRef, l'avantage c'est que ça t'occupes moins de mémoire (en effet tu travaille directement sur la variable). L'avantage du ByVal est que tu n'altère pas la variable de paramètre lors du process de ta sub/fct.

Reply

Marsh Posté le 26-03-2001 à 14:00:25    

j'étais absent 8 jours !
donc ce n'est utilisé que pour les procédures ?

Reply

Marsh Posté le 27-03-2001 à 21:45:25    

Ces mots-clés sont utilisés aussi bien pour les procédures que pour les fonctions.
Par défaut c'est byref qui est utilisé.
Si un paramètre est passé entre parenthèses, alors il est passé par valeur (byval) dans le cas ou la déclaration de ta fonction/procédure ne précise pas le mode d'utilisation.
Amuse-toi avec cet exemple:
 
sub test_sub(param1 as string, byval param2 as string)
 param1 = "coucou"
 param2 = "RE coucou"
end sub
 
sub test()
 dim a as string
 dim b as string
 
 a = "A"
 b = "B"
 
 test_sub a, b
 ' résultat a = "coucou" et b = "B"
 
 test_sub (a), c
 ' résultat a = "A" et b = "B"
 
 
end sub
 
Pour ce qui est de l'utilité, voici un autre exemple:
Admettons que tu doives créer une fonction CONNX_DISPO() de connexion à un dispositif quelconque.
Cette connexion initialise des variables qui te servent à utiliser ce dispositif, à l'identifier.
Cette connexion permet aussi d'identifier toutes les erreurs qui ont empêché la connexion.
 
L'utilisation des paramètres avec ByRef permet de faire ceci
 
dim id_dispo, lib_dispo, env_dispo, etc_dispo
 
code_erreur = CONNX_DISPO(id_dispo, lib_dispo, env_dispo, etc_dispo)
if code_erreur then  
 exit...
else
 ' utilisation des variables id_dispo,... initialisées par CONNX_DISPO()
 ...
 
La fonction peut ainsi renvoyer plusieurs valeurs, plus un éventuel code d'erreur sans utiliser de variables globales (seul autre moyen de récupérer plusieurs valeurs d'une fonction).
Cela permet de limiter l'utilisation mémoire. Surtout en vb où tu n'as le choix qu'entre des variables globales à tout un module, ou restreintes à la procédure en cours.
Cette technique permet dans ce cas de créer des variables restreintes à une procédure, mais utilisables dans les procédures appelées par celle-ci, sans consommer plus de mémoire.
 
J'espère avoir défriché le problème.
 
A+

Reply

Marsh Posté le 28-03-2001 à 08:28:58    

Merci
j'y cojite et l'emploierai
sûr sûr ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed