cs_Red_Dragon
Messages postés41Date d'inscriptionvendredi 9 juin 2006StatutMembreDernière intervention27 septembre 2006
-
14 juin 2006 à 15:25
cs_chimi
Messages postés20Date d'inscriptionmardi 4 avril 2006StatutMembreDernière intervention21 avril 2008
-
14 juin 2006 à 18:53
En tout premier, je demande indulgence auprès des programmeurs expérimentés car j'ai une question qui les fera certainement sourire. En second, je remercie ces mêmes programmeurs pour l'aide qu'ils apporteront à un débutant.
Si j'ai bien tout compris, les variables sont réparties en deux catégories : les variables de type 'par valeur' et les variables de type 'par référence'. La différence de fonctionnement entre les deux me parait claire. Par contre (si j'ai toujours bien compris), la variable de type String se classe dans la catégorie des variable de type 'par référence' (peut se vérifier facilement avec la fonction IsReference) mais fonctionne comme une variable de type 'par valeur'.
Quelqu'un peut il m'expliquer ce cas particulier ?
Y a t il une subtilité sur les variables String ?
Faut il simplement considérer que c'est comme cela et qu'il n'y a pas de question à se poser ?
nborges
Messages postés43Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 2 novembre 2007 14 juin 2006 à 15:40
Salut,
le type des variable ne veulent pas dire qú´un type est reference ou pas..
tu peux utilizer la string par valeur ou par reference,
la diference est que qd tu passe par valeur une variable, si tu la change dans la fonction ou dans la sub, cela ne sera valable qd dans la même function, par contre si tu la passe par reference, tous les changement efectué dans la function serão visible après.
exemple:
private sub exemple()
dim X as string
x=""
teste(X)
'aprés teste, X=""
teste1(X)
'aprés teste1, X= teste1
end sub
public sub teste(byval x as string)
x= teste
end sub
public sub teste1(byref x as string)
x= teste1
end sub
cela functione de la meme amniere avec d´autre type..
cs_Red_Dragon
Messages postés41Date d'inscriptionvendredi 9 juin 2006StatutMembreDernière intervention27 septembre 2006 14 juin 2006 à 17:36
>nborges : merci de ta réponse, mais elle ne correspond pas exactement à la question que je me posais. Je me suis mal exprimé. Je vais préciser si tu veux bien.
J'ai bien compris la différence entre un "ByVal" et un "ByRef" dans un appel de procédure ou fonction.
Mais comme l'a dit Renfield (merci à lui) la classe String est bien de type référence. Je reviens donc à ma question avec un exemple pour etre plus précis.
Avec des variables de type 'valeur' les variables sont distinctes, c'est à dire :
Dim A,B as Integer
A=1
B=A
A=2
dans ce cas le fait de modifier A ne modifie pas B (A=2 et B=1)
tandis-que pour des variables de type 'référence', on ne travaille plus sur les valeurs mais sur l'adressage (il me semble) donc par exemple avec des tableaux :
Dim A(2)
Dim B(2)
si j'affecte des valeurs différentes dans les deux tableaux
A(0)=1 : A(1)=2 : B(0)=3 : B(1)=4
si ensuite je fais
B=A
et que je change les valeurs du tableau A
A(0)=5 : A(1)=6
les valeurs du tableau B s'en trouvent également modifiées (on pointe sur les mêmes adresses je pense)
Et donc j'en viens à ma question sur la variable String, elle est de type 'référence' mais se comporte comme un type 'valeur', car si je fais
Dim A,B as String
A="un"
B=A
A="deux"
cela ne modifie pas B.
En conclusion : String est de type 'référence' et se comporte comme un type 'valeur'
Je voulais donc savoir si il y avait une explication à cela ? une raison que cela soit ainsi ?
nborges, même si ta réponse ne correspond pas tout à fait à ce que j'attendais, je te remercie du temps consacré, et peut etre pourras tu me donner plus de précision, merci à toi
Peut etre que je me pose une question inutile en fait... mais je cherche à comprendre
cs_chimi
Messages postés20Date d'inscriptionmardi 4 avril 2006StatutMembreDernière intervention21 avril 2008 14 juin 2006 à 18:53
en fait on appelle ce procede appel des valeurs
tu peus appeller par valeur ou reference
par valeur on te renvois la valeur de variable x intact
mais par adresse tu peux la modifier je vais te passer quelques exemple en pascal la semaine prochaine