Statement, instruction

Microsoft VBScript

Microsoft® Visual Basic® Scripting Edition Function, instruction  Référence du langage 
Version 1 


Description
Déclare le nom, les arguments et le code qui forment le corps d'une procédure Function.
Syntaxe
[Public [Default] | Private] Function name [(arglist)]
    [statements]
    [name = expression]
    [Exit Function]
    [statements]
    [name = expression]
End Function

La syntaxe de l'instruction Function comprend les éléments suivants :

Élément Description
Public Indique que la procédure Function est accessible à toutes les autres procédures dans tous les scripts.
Default Utilisé uniquement avec le mot clé Public dans un bloc Class pour indiquer que la procédure Function est la méthode par défaut de la classe. Une erreur se produit si plusieurs procédures Default sont spécifiées dans une classe.
Private Indique que la procédure Function est accessible uniquement aux autres procédures du script dans lequel elle est déclarée ou que la fonction est un membre d'une classe et que la procédure Function est accessible uniquement aux autres procédures de cette classe.
name Nom de la procédure Function ; respecte les conventions standard d'affectation de nom à des variables.
arglist Liste de variables représentant les arguments qui sont transmis à la procédure Function lorsqu'elle est appelée. Plusieurs variables sont séparées par des virgules.
statements Tout groupe d'instructions à exécuter dans le corps de la procédure Function.
expression Valeur renvoyée de la procédure Function.

L'argument arglist comporte la syntaxe et les éléments suivants :

[ByVal | ByRef] varname[( )]

Élément Description
ByVal Indique que l'argument est transmis par valeur.
ByRef Indique que l'argument est transmis par référence.
varname Nom de la variable représentant l'argument qui respecte les conventions standard d'affectation de nom à des variables.

Notes
En l'absence de spécification explicite par l'intermédiaire de Public ou Private, les procédures Function sont publiques par défaut, autrement dit, elles sont visibles pour toutes les autres procédures de votre script. La valeur des variables locales dans une Function n'est pas conservée entre les appels à la procédure.

Vous ne pouvez pas définir une procédure Function à l'intérieur d'une autre procédure Sub ou Property Get.

L'instruction Exit Function provoque la sortie immédiate d'une procédure Function. L'exécution du programme se poursuit avec l'instruction succédant à l'instruction ayant appelé la procédure Function. Il n'existe pas de limite au nombre d'instructions Exit Function pouvant apparaître n'importe où dans une procédure Function.

À l'instar d'une procédure Sub, une procédure Function est une procédure distincte qui peut prendre des arguments, exécuter une série d'instructions et changer la valeur de ses arguments. Toutefois, contrairement à une procédure Sub, vous pouvez utiliser une procédure Function sur le côté droit d'une expression de la même manière que vous utilisez une fonction intrinsèque comme Sqr, Cos ou Chr, quand vous voulez utiliser la valeur renvoyée par la fonction.

Vous appelez une procédure Function en utilisant le nom de fonction, suivi de la liste des arguments entre parenthèses, dans une expression. Pour toute information spécifique sur la manière d'appeler les procédures Function, consultez l'instruction Call.


Attention  Les procédures Function peuvent être récursives : autrement dit, elles peuvent s'appeler elles-mêmes pour effectuer une tâche donnée. Toutefois la récursivité peut amener au dépassement de la capacité de la pile.

Pour renvoyer une valeur à partir d'une fonction, affectez cette valeur au nom de la fonction. Il n'existe pas de limite au nombre de ces affectations pouvant apparaître n'importe où dans la procédure. Si aucune valeur n'est affectée à name, la procédure renvoie une valeur par défaut : une fonction numérique renvoie 0 et une fonction chaîne renvoie une chaîne de longueur nulle (""). Une fonction qui renvoie une référence d'objet renvoie la valeur Nothing si aucune référence d'objet n'est affectée à name (en utilisant Set) dans la Function.

L'exemple suivant décrit la manière d'affecter une valeur renvoyée à une fonction nommée BinarySearch. Dans ce cas, la valeur False est affectée au nom pour indiquer qu'une certaine valeur n'a pas été trouvée.

Function BinarySearch(. . .)
    . . .
    ' Valeur non trouvée, renvoie la valeur False.
    If lower > upper Then
        BinarySearch = False  
        Exit Function 
    End If
    . . .
End Function
Les variables utilisées dans les procédures Function se divisent en deux catégories : celles explicitement déclarées dans la procédure et celles qui ne le sont pas. Les premières (déclarées en utilisant Dim ou l'équivalent) sont toujours locales pour la procédure. Les variables qui sont utilisées mais qui ne sont pas explicitement déclarées dans une procédure sont également locales à moins qu'elles n'aient été explicitement déclarées à un niveau supérieur hors de la procédure.


Attention  Une procédure peut utiliser une variable qui n'est pas déclarée explicitement dans la procédure, mais un conflit peut se produire si tout élément que vous avez défini au niveau du script porte le même nom que la variable. Si votre procédure fait référence à une variable non déclarée qui porte le même nom qu'une autre procédure, constante ou variable, il est supposé que votre procédure fait référence au nom situé au niveau du script. Pour éviter ce genre de conflit, utilisez une instruction Option Explicit pour forcer la déclaration explicite des variables.


Attention  VBScript peut réorganiser les expressions arithmétiques de manière à optimiser l'efficacité interne. évitez d'utiliser une procédure Function dans une expression arithmétique quand la fonction change la valeur des variables dans la même expression.