Documentation de Gambas - /doc/byref

/doc/byref

# Passer Un Argument Par Référence

La fonctionnalité BYREF a essentiellement été ajoutée pour aider au portage des projets VB.

Elle ne fonctionne pas en passant des pointeurs, mais en ne libérant pas la valeur de l'argument lorsque la fonction se termine, et en la stockant dans l'expression passée par référence.

En d'autres termes :

    GetData(BYREF sResult)

effectue en réalité ce qui suit :

      GetData(sResult) ' Pousse sResult comme premier argument sur la pile.
      ...                         ' Ne libère pas la pile après que GetData soit terminé.
      sResult = ...         ' Obtient la valeur depuis la pile et la place dans sResult.

Notez que de cette façon, n'importe quelle expression d'affectation peut être passée par référence.

      GetData(BYREF MyCollectionOfLabels["key"].Text)

Au niveau de la déclaration de fonction, BYREF signifie que vous pouvez passer l'argument par référence mais vous n’êtes pas obligé de le faire.

Au niveau de l'appel de fonction, BYREF signifie que vous voulez que l'argument soit passé par référence.

Comme en Gambas l'édition des liens est entièrement dynamique, l'interpréteur vérifie lors de l'exécution que vous n'utilisez BYREF que si la fonction le permet réellement. C'est la raison pour laquelle BYREF doit être spécifié à la fois dans la déclaration de fonction et lors de l'appel de fonction.

BYREF rend l'appel de fonction plus lent en raison des vérifications nécessaires et du processus supplémentaire pour rappeler la valeur depuis la pile.