Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5310 connectés 

 


Dernière réponse
Sujet : [VB6] ByVal ou ByRéf ?
Hepil Merci
j'y cojite et l'emploierai
sûr sûr ...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Hepil Merci
j'y cojite et l'emploierai
sûr sûr ...
Sylderon 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+
Hepil j'étais absent 8 jours !
donc ce n'est utilisé que pour les procédures ?
Kyle_Katarn 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.
RalphXML 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
Hepil 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]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)