Je cherche à savoir quel est la meilleure option des deux. J'ai une
qui prend un type valeur (structure) comme argument et la, je me demande
qu'est-ce qui est le mieux entre passé la valeur byRef pour intéragir
directement sur celle-ci ou bien, la passé ByVal pour ensuite la
Je cherche à savoir quel est la meilleure option des deux. J'ai une
qui prend un type valeur (structure) comme argument et la, je me demande
qu'est-ce qui est le mieux entre passé la valeur byRef pour intéragir
directement sur celle-ci ou bien, la passé ByVal pour ensuite la
Je cherche à savoir quel est la meilleure option des deux. J'ai une
qui prend un type valeur (structure) comme argument et la, je me demande
qu'est-ce qui est le mieux entre passé la valeur byRef pour intéragir
directement sur celle-ci ou bien, la passé ByVal pour ensuite la
Bonsoir,
> Je cherche à savoir quel est la meilleure option des deux. J'ai une
fonction
> qui prend un type valeur (structure) comme argument et la, je me demande
> qu'est-ce qui est le mieux entre passé la valeur byRef pour intéragir
> directement sur celle-ci ou bien, la passé ByVal pour ensuite la
retourner.
Si vous utilisez ByRef, la méthode va modifier directement votre
si vous utilisez ByVal, la méthode va copier votre structure, modifier la
copie, écraser l'ancienne structure avec la copie. Bref, ByVal n'a aucun
avantage dans cette situation.
--
Zazar
Bonsoir,
> Je cherche à savoir quel est la meilleure option des deux. J'ai une
fonction
> qui prend un type valeur (structure) comme argument et la, je me demande
> qu'est-ce qui est le mieux entre passé la valeur byRef pour intéragir
> directement sur celle-ci ou bien, la passé ByVal pour ensuite la
retourner.
Si vous utilisez ByRef, la méthode va modifier directement votre
si vous utilisez ByVal, la méthode va copier votre structure, modifier la
copie, écraser l'ancienne structure avec la copie. Bref, ByVal n'a aucun
avantage dans cette situation.
--
Zazar
Bonsoir,
> Je cherche à savoir quel est la meilleure option des deux. J'ai une
fonction
> qui prend un type valeur (structure) comme argument et la, je me demande
> qu'est-ce qui est le mieux entre passé la valeur byRef pour intéragir
> directement sur celle-ci ou bien, la passé ByVal pour ensuite la
retourner.
Si vous utilisez ByRef, la méthode va modifier directement votre
si vous utilisez ByVal, la méthode va copier votre structure, modifier la
copie, écraser l'ancienne structure avec la copie. Bref, ByVal n'a aucun
avantage dans cette situation.
--
Zazar
> L'avantage de la sécurité !
> L'avantage de la sécurité !
> L'avantage de la sécurité !
> L'avantage de la sécurité !
Vous pouvez détailler ce que vous entendez par là ?
--
Zazar
> L'avantage de la sécurité !
Vous pouvez détailler ce que vous entendez par là ?
--
Zazar
> L'avantage de la sécurité !
Vous pouvez détailler ce que vous entendez par là ?
--
Zazar
> Ca dépend du contexte évidemment ! mais si on imagine rien qu'au niveau
threads ? Un membre partagé en référence n'offre pas une très bonne
d'intégrité. ...
mais il y a d'autre contexte ou un byVal est plus
sécurisant !
> Ca dépend du contexte évidemment ! mais si on imagine rien qu'au niveau
threads ? Un membre partagé en référence n'offre pas une très bonne
d'intégrité. ...
mais il y a d'autre contexte ou un byVal est plus
sécurisant !
> Ca dépend du contexte évidemment ! mais si on imagine rien qu'au niveau
threads ? Un membre partagé en référence n'offre pas une très bonne
d'intégrité. ...
mais il y a d'autre contexte ou un byVal est plus
sécurisant !
Ca dépend du contexte évidemment ! mais si on imagine rien qu'au niveau
threads ? Un membre partagé en référence n'offre pas une très bonne
d'intégrité. ... mais il y a d'autre contexte ou un byVal est plus
sécurisant !
"Zazar" a écrit dans le
de news:41238b8a$0$27134$
>
> > L'avantage de la sécurité !
>
> Vous pouvez détailler ce que vous entendez par là ?
>
> --
> Zazar
>
>
Ca dépend du contexte évidemment ! mais si on imagine rien qu'au niveau
threads ? Un membre partagé en référence n'offre pas une très bonne
d'intégrité. ... mais il y a d'autre contexte ou un byVal est plus
sécurisant !
"Zazar" <DILAVNI.nicolas.prats@iie.cnam.fr.INVALID> a écrit dans le
de news:41238b8a$0$27134$636a15ce@news.free.fr...
>
> > L'avantage de la sécurité !
>
> Vous pouvez détailler ce que vous entendez par là ?
>
> --
> Zazar
>
>
Ca dépend du contexte évidemment ! mais si on imagine rien qu'au niveau
threads ? Un membre partagé en référence n'offre pas une très bonne
d'intégrité. ... mais il y a d'autre contexte ou un byVal est plus
sécurisant !
"Zazar" a écrit dans le
de news:41238b8a$0$27134$
>
> > L'avantage de la sécurité !
>
> Vous pouvez détailler ce que vous entendez par là ?
>
> --
> Zazar
>
>
> Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
contre, si j'ai à traité des structures volumineuses en données, j'imagine
qu'il est plus efficace de jouer directement sur la structure même avec
ByRef plutot que de copier celle-ci avec ByVal.
> Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
contre, si j'ai à traité des structures volumineuses en données, j'imagine
qu'il est plus efficace de jouer directement sur la structure même avec
ByRef plutot que de copier celle-ci avec ByVal.
> Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
contre, si j'ai à traité des structures volumineuses en données, j'imagine
qu'il est plus efficace de jouer directement sur la structure même avec
ByRef plutot que de copier celle-ci avec ByVal.
> Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
> contre, si j'ai à traité des structures volumineuses en données,
> qu'il est plus efficace de jouer directement sur la structure même avec
> ByRef plutot que de copier celle-ci avec ByVal.
En fait, je vais être un peu plus complet.
Vous semblez comprendre la différence entre ByVal et ByRef, je ne vais pas
revenir.
La première question qu'il faut se poser c'est à quoi sert une structure ?
Les principales différences entre une structure et une classe concernent
performances (la première peut être stockée sur la pile lorsque c'est une
variable locale ou inlinée dans un tableau), et le comportement
(l'affectation se fait par copie pour la structure, une structure ne peut
pas être héritée, ...).
Si on choisit d'utiliser une structure, c'est forcément pour un de ces
points-là.
Si c'est pour le deuxième point, c'est AMA une erreur de conception : il
vaut mieux utiliser une classe et si nécessaire on lui fait implémenter
ICloneable, on la marque comme sealed, ...
Les structures ne servent donc qu'à optimiser les parties critiques du
programme. Alors doit-on utiliser ByVal ou ByRef ? Le premier étant plus
lent que le second, dans un contexte d'optimisation on choisira toujours
ByRef. Conclusion : ByVal est "inutile" pour les structures.
Qu'en est-il pour les classes ?
La question se porte alors sur la sémantique de la méthode et de son
paramètre.
Si on veut modifier le contenu de l'objet, alors ByRef est totalement
inutile puisque la classe est un type réfèrence. L'objet devra donc être
passé par valeur. (Rem : il faudrait ensuite se demander si la méthode
modifiant l'objet ne devrait pas être une méthode de la classe de
Ici le paramètre n'est qu'un paramètre d'entrée de la fonction (In dans
languages de description des algorithmes)
Par contre, si on veut utiliser une fonction qui renvoie plusieurs
résultats, alors ByRef est indiqué. Ces paramètres sont en fait des
de retour de la fonction. (En C#, on utiliserait le mot-clef out, tout
dans les LDA).
Et enfin, si on veut réellement modifier la variable de la fonction
appelante (exemple classique : une fonction Swap(ByRef obj1 as object,
obj2 as object)), là encore ByRef doit être utilisé. Là, les paramètres
des paramètres d'entrées et de sortie (In et Out; en C# on utiliserait le
mot-clef ref).
Voilà. J'espère que ça vous aidera à vous décider pour toutes les
fois.
--
Zazar
> Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
> contre, si j'ai à traité des structures volumineuses en données,
> qu'il est plus efficace de jouer directement sur la structure même avec
> ByRef plutot que de copier celle-ci avec ByVal.
En fait, je vais être un peu plus complet.
Vous semblez comprendre la différence entre ByVal et ByRef, je ne vais pas
revenir.
La première question qu'il faut se poser c'est à quoi sert une structure ?
Les principales différences entre une structure et une classe concernent
performances (la première peut être stockée sur la pile lorsque c'est une
variable locale ou inlinée dans un tableau), et le comportement
(l'affectation se fait par copie pour la structure, une structure ne peut
pas être héritée, ...).
Si on choisit d'utiliser une structure, c'est forcément pour un de ces
points-là.
Si c'est pour le deuxième point, c'est AMA une erreur de conception : il
vaut mieux utiliser une classe et si nécessaire on lui fait implémenter
ICloneable, on la marque comme sealed, ...
Les structures ne servent donc qu'à optimiser les parties critiques du
programme. Alors doit-on utiliser ByVal ou ByRef ? Le premier étant plus
lent que le second, dans un contexte d'optimisation on choisira toujours
ByRef. Conclusion : ByVal est "inutile" pour les structures.
Qu'en est-il pour les classes ?
La question se porte alors sur la sémantique de la méthode et de son
paramètre.
Si on veut modifier le contenu de l'objet, alors ByRef est totalement
inutile puisque la classe est un type réfèrence. L'objet devra donc être
passé par valeur. (Rem : il faudrait ensuite se demander si la méthode
modifiant l'objet ne devrait pas être une méthode de la classe de
Ici le paramètre n'est qu'un paramètre d'entrée de la fonction (In dans
languages de description des algorithmes)
Par contre, si on veut utiliser une fonction qui renvoie plusieurs
résultats, alors ByRef est indiqué. Ces paramètres sont en fait des
de retour de la fonction. (En C#, on utiliserait le mot-clef out, tout
dans les LDA).
Et enfin, si on veut réellement modifier la variable de la fonction
appelante (exemple classique : une fonction Swap(ByRef obj1 as object,
obj2 as object)), là encore ByRef doit être utilisé. Là, les paramètres
des paramètres d'entrées et de sortie (In et Out; en C# on utiliserait le
mot-clef ref).
Voilà. J'espère que ça vous aidera à vous décider pour toutes les
fois.
--
Zazar
> Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
> contre, si j'ai à traité des structures volumineuses en données,
> qu'il est plus efficace de jouer directement sur la structure même avec
> ByRef plutot que de copier celle-ci avec ByVal.
En fait, je vais être un peu plus complet.
Vous semblez comprendre la différence entre ByVal et ByRef, je ne vais pas
revenir.
La première question qu'il faut se poser c'est à quoi sert une structure ?
Les principales différences entre une structure et une classe concernent
performances (la première peut être stockée sur la pile lorsque c'est une
variable locale ou inlinée dans un tableau), et le comportement
(l'affectation se fait par copie pour la structure, une structure ne peut
pas être héritée, ...).
Si on choisit d'utiliser une structure, c'est forcément pour un de ces
points-là.
Si c'est pour le deuxième point, c'est AMA une erreur de conception : il
vaut mieux utiliser une classe et si nécessaire on lui fait implémenter
ICloneable, on la marque comme sealed, ...
Les structures ne servent donc qu'à optimiser les parties critiques du
programme. Alors doit-on utiliser ByVal ou ByRef ? Le premier étant plus
lent que le second, dans un contexte d'optimisation on choisira toujours
ByRef. Conclusion : ByVal est "inutile" pour les structures.
Qu'en est-il pour les classes ?
La question se porte alors sur la sémantique de la méthode et de son
paramètre.
Si on veut modifier le contenu de l'objet, alors ByRef est totalement
inutile puisque la classe est un type réfèrence. L'objet devra donc être
passé par valeur. (Rem : il faudrait ensuite se demander si la méthode
modifiant l'objet ne devrait pas être une méthode de la classe de
Ici le paramètre n'est qu'un paramètre d'entrée de la fonction (In dans
languages de description des algorithmes)
Par contre, si on veut utiliser une fonction qui renvoie plusieurs
résultats, alors ByRef est indiqué. Ces paramètres sont en fait des
de retour de la fonction. (En C#, on utiliserait le mot-clef out, tout
dans les LDA).
Et enfin, si on veut réellement modifier la variable de la fonction
appelante (exemple classique : une fonction Swap(ByRef obj1 as object,
obj2 as object)), là encore ByRef doit être utilisé. Là, les paramètres
des paramètres d'entrées et de sortie (In et Out; en C# on utiliserait le
mot-clef ref).
Voilà. J'espère que ça vous aidera à vous décider pour toutes les
fois.
--
Zazar
Mais si tu utilises ByVal ou ByRef pour une classe, le résultat sera le
finalement puisque une classe est un type référence, non? Autrement dit,
fonction Swap avec ByRef ou ByVal fonctionne dans les deux cas.
Honnêtement, je comprend très bien le principe mais j'ai beaucoup de
difficulté encore à comprendre pourquoi utiliser plus l'un que l'autre
certain cas. Au bout de la ligne, l'impression que cela me donne est tout
simplement que si, je peux utiliser ByRef au lieu de ByVal, la performance
est probablement meilleure.
Pour ce qui est de la différence entre structure et classe, la distinction
est très clair et je crois bien en faire un bon usage.
Merci de tes explications.
David
"Zazar" a écrit dans le
de news:4123b9a5$0$26993$
> > Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
> > contre, si j'ai à traité des structures volumineuses en données,
j'imagine
> > qu'il est plus efficace de jouer directement sur la structure même
> > ByRef plutot que de copier celle-ci avec ByVal.
>
> En fait, je vais être un peu plus complet.
> Vous semblez comprendre la différence entre ByVal et ByRef, je ne vais
y
> revenir.
>
> La première question qu'il faut se poser c'est à quoi sert une structure
>
> Les principales différences entre une structure et une classe concernent
les
> performances (la première peut être stockée sur la pile lorsque c'est
> variable locale ou inlinée dans un tableau), et le comportement
> (l'affectation se fait par copie pour la structure, une structure ne
> pas être héritée, ...).
> Si on choisit d'utiliser une structure, c'est forcément pour un de ces
> points-là.
> Si c'est pour le deuxième point, c'est AMA une erreur de conception : il
> vaut mieux utiliser une classe et si nécessaire on lui fait implémenter
> ICloneable, on la marque comme sealed, ...
> Les structures ne servent donc qu'à optimiser les parties critiques du
> programme. Alors doit-on utiliser ByVal ou ByRef ? Le premier étant plus
> lent que le second, dans un contexte d'optimisation on choisira toujours
> ByRef. Conclusion : ByVal est "inutile" pour les structures.
>
> Qu'en est-il pour les classes ?
> La question se porte alors sur la sémantique de la méthode et de son
> paramètre.
> Si on veut modifier le contenu de l'objet, alors ByRef est totalement
> inutile puisque la classe est un type réfèrence. L'objet devra donc être
> passé par valeur. (Rem : il faudrait ensuite se demander si la méthode
> modifiant l'objet ne devrait pas être une méthode de la classe de
l'objet).
> Ici le paramètre n'est qu'un paramètre d'entrée de la fonction (In dans
les
> languages de description des algorithmes)
> Par contre, si on veut utiliser une fonction qui renvoie plusieurs
> résultats, alors ByRef est indiqué. Ces paramètres sont en fait des
valeurs
> de retour de la fonction. (En C#, on utiliserait le mot-clef out, tout
comme
> dans les LDA).
> Et enfin, si on veut réellement modifier la variable de la fonction
> appelante (exemple classique : une fonction Swap(ByRef obj1 as object,
ByRef
> obj2 as object)), là encore ByRef doit être utilisé. Là, les paramètres
sont
> des paramètres d'entrées et de sortie (In et Out; en C# on utiliserait
> mot-clef ref).
>
> Voilà. J'espère que ça vous aidera à vous décider pour toutes les
prochaines
> fois.
>
> --
> Zazar
>
>
>
>
Mais si tu utilises ByVal ou ByRef pour une classe, le résultat sera le
finalement puisque une classe est un type référence, non? Autrement dit,
fonction Swap avec ByRef ou ByVal fonctionne dans les deux cas.
Honnêtement, je comprend très bien le principe mais j'ai beaucoup de
difficulté encore à comprendre pourquoi utiliser plus l'un que l'autre
certain cas. Au bout de la ligne, l'impression que cela me donne est tout
simplement que si, je peux utiliser ByRef au lieu de ByVal, la performance
est probablement meilleure.
Pour ce qui est de la différence entre structure et classe, la distinction
est très clair et je crois bien en faire un bon usage.
Merci de tes explications.
David
"Zazar" <DILAVNI.nicolas.prats@iie.cnam.fr.INVALID> a écrit dans le
de news:4123b9a5$0$26993$626a14ce@news.free.fr...
> > Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
> > contre, si j'ai à traité des structures volumineuses en données,
j'imagine
> > qu'il est plus efficace de jouer directement sur la structure même
> > ByRef plutot que de copier celle-ci avec ByVal.
>
> En fait, je vais être un peu plus complet.
> Vous semblez comprendre la différence entre ByVal et ByRef, je ne vais
y
> revenir.
>
> La première question qu'il faut se poser c'est à quoi sert une structure
>
> Les principales différences entre une structure et une classe concernent
les
> performances (la première peut être stockée sur la pile lorsque c'est
> variable locale ou inlinée dans un tableau), et le comportement
> (l'affectation se fait par copie pour la structure, une structure ne
> pas être héritée, ...).
> Si on choisit d'utiliser une structure, c'est forcément pour un de ces
> points-là.
> Si c'est pour le deuxième point, c'est AMA une erreur de conception : il
> vaut mieux utiliser une classe et si nécessaire on lui fait implémenter
> ICloneable, on la marque comme sealed, ...
> Les structures ne servent donc qu'à optimiser les parties critiques du
> programme. Alors doit-on utiliser ByVal ou ByRef ? Le premier étant plus
> lent que le second, dans un contexte d'optimisation on choisira toujours
> ByRef. Conclusion : ByVal est "inutile" pour les structures.
>
> Qu'en est-il pour les classes ?
> La question se porte alors sur la sémantique de la méthode et de son
> paramètre.
> Si on veut modifier le contenu de l'objet, alors ByRef est totalement
> inutile puisque la classe est un type réfèrence. L'objet devra donc être
> passé par valeur. (Rem : il faudrait ensuite se demander si la méthode
> modifiant l'objet ne devrait pas être une méthode de la classe de
l'objet).
> Ici le paramètre n'est qu'un paramètre d'entrée de la fonction (In dans
les
> languages de description des algorithmes)
> Par contre, si on veut utiliser une fonction qui renvoie plusieurs
> résultats, alors ByRef est indiqué. Ces paramètres sont en fait des
valeurs
> de retour de la fonction. (En C#, on utiliserait le mot-clef out, tout
comme
> dans les LDA).
> Et enfin, si on veut réellement modifier la variable de la fonction
> appelante (exemple classique : une fonction Swap(ByRef obj1 as object,
ByRef
> obj2 as object)), là encore ByRef doit être utilisé. Là, les paramètres
sont
> des paramètres d'entrées et de sortie (In et Out; en C# on utiliserait
> mot-clef ref).
>
> Voilà. J'espère que ça vous aidera à vous décider pour toutes les
prochaines
> fois.
>
> --
> Zazar
>
>
>
>
Mais si tu utilises ByVal ou ByRef pour une classe, le résultat sera le
finalement puisque une classe est un type référence, non? Autrement dit,
fonction Swap avec ByRef ou ByVal fonctionne dans les deux cas.
Honnêtement, je comprend très bien le principe mais j'ai beaucoup de
difficulté encore à comprendre pourquoi utiliser plus l'un que l'autre
certain cas. Au bout de la ligne, l'impression que cela me donne est tout
simplement que si, je peux utiliser ByRef au lieu de ByVal, la performance
est probablement meilleure.
Pour ce qui est de la différence entre structure et classe, la distinction
est très clair et je crois bien en faire un bon usage.
Merci de tes explications.
David
"Zazar" a écrit dans le
de news:4123b9a5$0$26993$
> > Donc, si je comprend bien, ça dépend tout simplement du contexte. Par
> > contre, si j'ai à traité des structures volumineuses en données,
j'imagine
> > qu'il est plus efficace de jouer directement sur la structure même
> > ByRef plutot que de copier celle-ci avec ByVal.
>
> En fait, je vais être un peu plus complet.
> Vous semblez comprendre la différence entre ByVal et ByRef, je ne vais
y
> revenir.
>
> La première question qu'il faut se poser c'est à quoi sert une structure
>
> Les principales différences entre une structure et une classe concernent
les
> performances (la première peut être stockée sur la pile lorsque c'est
> variable locale ou inlinée dans un tableau), et le comportement
> (l'affectation se fait par copie pour la structure, une structure ne
> pas être héritée, ...).
> Si on choisit d'utiliser une structure, c'est forcément pour un de ces
> points-là.
> Si c'est pour le deuxième point, c'est AMA une erreur de conception : il
> vaut mieux utiliser une classe et si nécessaire on lui fait implémenter
> ICloneable, on la marque comme sealed, ...
> Les structures ne servent donc qu'à optimiser les parties critiques du
> programme. Alors doit-on utiliser ByVal ou ByRef ? Le premier étant plus
> lent que le second, dans un contexte d'optimisation on choisira toujours
> ByRef. Conclusion : ByVal est "inutile" pour les structures.
>
> Qu'en est-il pour les classes ?
> La question se porte alors sur la sémantique de la méthode et de son
> paramètre.
> Si on veut modifier le contenu de l'objet, alors ByRef est totalement
> inutile puisque la classe est un type réfèrence. L'objet devra donc être
> passé par valeur. (Rem : il faudrait ensuite se demander si la méthode
> modifiant l'objet ne devrait pas être une méthode de la classe de
l'objet).
> Ici le paramètre n'est qu'un paramètre d'entrée de la fonction (In dans
les
> languages de description des algorithmes)
> Par contre, si on veut utiliser une fonction qui renvoie plusieurs
> résultats, alors ByRef est indiqué. Ces paramètres sont en fait des
valeurs
> de retour de la fonction. (En C#, on utiliserait le mot-clef out, tout
comme
> dans les LDA).
> Et enfin, si on veut réellement modifier la variable de la fonction
> appelante (exemple classique : une fonction Swap(ByRef obj1 as object,
ByRef
> obj2 as object)), là encore ByRef doit être utilisé. Là, les paramètres
sont
> des paramètres d'entrées et de sortie (In et Out; en C# on utiliserait
> mot-clef ref).
>
> Voilà. J'espère que ça vous aidera à vous décider pour toutes les
prochaines
> fois.
>
> --
> Zazar
>
>
>
>