Appel de fonction par call

geobasic Messages postés 69 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 3 octobre 2006 - 8 sept. 2006 à 00:33
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 8 sept. 2006 à 08:48
Existe-t'il  un moyen de savoir si dans un fonction l'appel a été réalisé sous la forme "valeur_retour = MaFonction" ou "Call MaFonction", et ce directement dans la fonction elle-même ?

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 sept. 2006 à 00:55
Salut
Je ne pense pas, non.
Mais explique ce que tu veux faire ou quel est ton problème, il y a surement une autre méthode.
De toute façon, si tu fais un Call et que tu renvoies une valeur par "valeur_retour = MaFonction", la valeur_retour sera perdue, mais rien de plus.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
geobasic Messages postés 69 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 3 octobre 2006
8 sept. 2006 à 01:30
Je suis en train de développer une classe dont la plupart des méthodes sont des fonctions qui renvoie un code erreur à partir d'une liste d'énumération.

Je part du prédiquat suivant: si l'utilisateur appel la fonction en récuperant la valeur de retour, toutes les erreurs éventuelles de la fonction lui sont comuniquées via la variable de retour de la fonction. Par contre lorsqu'il appelle la fonction par un simple call (dans le cas où il serait possible de le détecter dans la fonction), je considère que l'utilisateur ne désire pas filtrer les erreurs, et ces erreurs seront renvoillés en erreurs de classe via la méthode raise de l'objet Err.

On peut voir un comportement similaire avec la fonction Error de VB. Dans la fenêtre d'exécution si on fait "? error(n)" VB renvoie le libellé de l'erreur dans la fenêtre. Par contre si on fait "error n", il affiche un messagebox avec le libellé. Deux façon d'appeler, deux comportements différents. Le tout est de savoir comment il fait !
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 sept. 2006 à 01:44
salut,
désolé mais il n'y a pas de différence de traitement ou d'évènement entre ces 2 instructions

s = Error(1)
Call Error(1)

il en est de même pour msgbox ou autre....
ton "? function" n'est ni plus ni moins qu'un "debug.print fonction", donc un "call".

c'est vrai que de savoir si on récupère ou non le retour, çà pourrait éviter parfois un traitement.
à la limite tu peux ajouter un paramètre....

maintenant d'une faut vraiment en avoir l'utilité, et de deux encore faut-il se souvenir que la fonction requiert un param supplémentaire pour lui éviter certaines opérations...

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 sept. 2006 à 08:48
D'un autre coté, l'utilisateur qui utilise ta classe, doit savoir qu'il fait appel à des fonctions qui renvoient en retour un code d'erreur.
S'il choisit délibérement d'appeler la fonction par un Call, c'est que le code d'erreur ne l'interresse pas. J'imagine bien dans ce cas que l'affichage d'une MessageBox ne devrait pas trop l'interesser non plus.

Au niveau de tes fonctions, je ne pense pas que ce soit détectable. Car même avec un Call, tout le mécanisme de retour de valeur est mis en place. Le fonctionnement est strictement identique du point de vue de la fonction. Seulement, au lieu de retourner la valeur dans une variable de ton programme, une variable "fantome" est crée sur la pile, c'est elle qui va recevoir la valeur de retour
Après le retour, cette variable est simplement détruite sans etre utilisée.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Rejoignez-nous