Function, instruction (Visual Basic)
Déclare le nom, les paramètres et le code qui définissent une procédure Function.
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Composants
Terme |
Définition |
||||||
attributelist |
Optionnel. Consultez Liste d'attributs. |
||||||
accessmodifier |
Optionnel. Il peut s'agir de l'une des valeurs suivantes : Consultez Niveaux d'accès dans Visual Basic. |
||||||
proceduremodifiers |
Optionnel. Il peut s'agir de l'une des valeurs suivantes :
|
||||||
Shared |
Optionnel. Consultez Shared. |
||||||
Shadows |
Optionnel. Consultez Shadows. |
||||||
Async |
Optionnel. Consultez l' Async. |
||||||
Iterator |
Optionnel. Consultez l' itérateur. |
||||||
name |
Requis. Nom de la procédure. Consultez Noms d'éléments déclarés (Visual Basic). |
||||||
typeparamlist |
Optionnel. Liste des paramètres de type pour une procédure générique. Consultez Liste de types. |
||||||
parameterlist |
Optionnel. Liste des noms de variables locales représentant les paramètres de cette procédure. Consultez Liste de paramètres (Visual Basic). |
||||||
returntype |
Requis si Option Strict a la valeur On. Type de données de la valeur retournée par cette procédure. |
||||||
Implements |
Optionnel. Indique que cette procédure implémente une ou plusieurs procédures Function, chacune étant définie dans une interface implémentée par la classe ou la structure conteneur de cette procédure. Consultez Implements, instruction. |
||||||
implementslist |
Requis si Implements est fourni. Liste des procédures Function implémentées. implementedprocedure [ , implementedprocedure ... ] Chaque implementedprocedure emploie la syntaxe et les paramètres suivants : interface.definedname
|
||||||
Handles |
Optionnel. Indique que cette procédure peut gérer un ou plusieurs événements spécifiques. Consultez Handles, clause (Visual Basic). |
||||||
eventlist |
Requis si Handles est fourni. Liste des événements gérés par cette procédure. eventspecifier [ , eventspecifier ... ] Chaque eventspecifier emploie la syntaxe et les éléments suivants : eventvariable.event
|
||||||
statements |
Optionnel. Bloc d'instructions à exécuter à l'intérieur de cette procédure. |
||||||
End Function |
Met fin à la définition de cette procédure. |
Notes
Tout le code exécutable doit se trouver à l'intérieur d'une procédure. Chaque procédure, à son tour, est déclarée dans une classe, une structure, un module qui est connu sous le nom de la classe conteneur, de la structure, ou du module.
Pour retourner une valeur au code appelant, utilisez une procédure d' Function ; sinon, utilisez une procédure d' Sub .
Définir une fonction
Vous pouvez définir une procédure d' Function uniquement au niveau de le module. Par conséquent, le contexte de déclaration d'une fonction doit être une classe, une structure, un module, ou une interface et ne peut pas être un fichier source, espace de noms, une procédure, ou un bloc. Pour plus d’informations, consultez Contextes de déclaration et niveaux d'accès par défaut (Visual Basic).
Les procédures Function disposent par défaut d'un accès public. Vous pouvez régler leurs niveaux d'accès avec les modificateurs d'accès.
Une procédure d' Function peut déclarer le type de données de la valeur que la procédure retourne. Vous pouvez spécifier n'importe quel type de données ou le nom d'une énumération, d'une structure, d'une classe, ou d'une interface. Si vous ne spécifiez pas le paramètre d' returntype , la procédure retourne Object.
Si cette procédure utilise le mot clé d' Implements , la classe conteneur ou la structure doit également avoir une instruction d' Implements qui suit immédiatement l'instruction d' Class ou d' Structure . L'instruction d' Implements doit inclure chaque interface qui est spécifiée dans implementslist. Toutefois, le nom selon lequel une interface définit Function (dans definedname) n'a pas à correspondre au nom de cette procédure (dans name).
Notes
Vous pouvez utiliser des expressions lambda pour définir des expressions de fonction inline.Pour plus d'informations, consultez Expression de fonction (Visual Basic) et Expressions lambda (Visual Basic).
Le retour d'une fonction
Lorsque la procédure retourne d' Function au code appelant, exécution reprend l'instruction qui suit l'instruction qui a appelé la procédure.
Pour retourner une valeur à partir d'une fonction, vous pouvez soit assigner la valeur au nom de fonction, soit l'inclure dans une instruction Return.
L'instruction d' Return simultanément assigne la valeur de retour et quitte la fonction, comme indiqué dans l'exemple suivant.
Function myFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
L'exemple suivant assigne la valeur de retour au nom de la fonction myFunction, puis utilise l'instruction Exit Function pour retourner :
Function myFunction(ByVal j As Integer) As Double
myFunction = 3.87 * j
Exit Function
End Function
Les instructions Exit Function et Return provoquent la sortie immédiate d'une procédure Function. Plusieurs instructions Exit Function et Return peuvent apparaître n'importe où dans la procédure, et vous pouvez associer des instructions Exit Function et Return.
Si vous utilisez Exit Function sans assigner une valeur à name, la procédure retourne la valeur par défaut pour le type de données spécifié dans returntype. Si returntype n'est pas spécifié, la procédure retourne Nothing, qui est la valeur par défaut pour Object.
Appel d'une fonction
Vous appelez une procédure Function en utilisant le nom de procédure, suivi de la liste d'arguments entre parenthèses, dans une expression. Vous pouvez mettre les parenthèses uniquement si vous ne fournissez pas d'arguments. Toutefois, votre code est plus lisible si vous incluez toujours les parenthèses.
Vous appelez une procédure d' Function la même façon que vous appelez une fonction de bibliothèque par exemple Sqrt, Cos, ou ChrW.
Vous pouvez également appeler une fonction à l'aide de le mot clé d' Call . Dans ce cas, la valeur de retour est ignorée. L'utilisation du mot clé d' Call n'est pas recommandé dans la plupart des cas. Pour plus d’informations, consultez Call, instruction (Visual Basic).
Visual Basic réorganise quelquefois les expressions arithmétiques de manière à optimiser l'efficacité interne. Pour cette raison, vous ne devez pas utiliser une procédure d' Function dans une expression arithmétique lorsque les modifications fonction de la valeur des variables de la même expression.
Fonctions Async
La fonctionnalité Async vous permet d'appeler des fonctions asynchrones sans utiliser des rappels explicites ou fractionner manuellement votre code entre des fonctions ou des expressions lambda multiples.
Si vous marquez une fonction avec le modificateur d' Async , vous pouvez utiliser l'opérateur d' attendez dans la fonction. Lorsque le contrôle atteint une expression d' Await dans la fonction d' Async , le contrôle retourne à l'appelant, et la progression de la fonction est interrompue jusqu'à ce que la tâche se termine attendue. Lorsque la tâche est terminée, l'opération peut continuer dans la fonction.
Notes
La procédure retourne d' Async à l'appelant lorsque l'un ou l'autre il rencontre l'objet d'abord attendu qui n'est pas encore terminé, il obtient à la fin de la procédure d' Async , ce qui se produit en premier.
Une fonction d' Async peut avoir un type de retour d' Task ou d' Task. Un exemple d'une fonction d' Async dont le type de retour d' Task est fourni ci-dessous.
Une fonction d' Async ne peut déclarer des paramètres de ByRef .
Sub, instruction (Visual Basic) peut également être marqué avec le modificateur d' Async . Cela est essentiellement utilisé pour les gestionnaires d'événements, où une valeur ne peut pas être retournée. Une procédure d' AsyncSub ne peut pas être attendue, et l'appel d'une procédure d' AsyncSub ne peut pas intercepter les exceptions levées par la procédure d' Sub .
Pour plus d'informations sur les fonctions d' Async , consultez Programmation asynchrone avec Async et Await (C# et Visual Basic), Flux de contrôle dans les programmes Async (C# et Visual Basic), et l' Types de retour Async (C# et Visual Basic).
Fonctions d'itérateur
Une fonction d'itérateur effectue une itération au sein d'une collection, telle qu'une liste ou un tableau. Une fonction d'itérateur utilise l'instruction de rendement pour retourner les éléments un par un. Lorsqu'une instruction de rendement est atteinte, la position actuelle dans le code est retrouvée. L'exécution est redémarrée de cet emplacement à la prochaine fois que la fonction d'itérateur est appelée.
Vous appelez un itérateur de code client à l'aide d'une instruction de For each… next .
Le type de retour d'une fonction d'itérateur peut être IEnumerable, IEnumerable, IEnumerator, ou IEnumerator.
Pour plus d’informations, consultez Itérateurs (C# et Visual Basic).
Exemple
L'exemple suivant utilise l'instruction Function pour déclarer le nom, les paramètres et le code qui forment le corps d'une procédure Function. Le modificateur ParamArray permet à la fonction d'accepter un nombre variable d'arguments.
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
L'exemple suivant appelle la fonction déclarée dans l'exemple précédent.
Module Module1
Sub Main()
' In the following function call, calcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = calcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = calcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
End Module
Dans l'exemple suivant, DelayAsync est AsyncFunction dont le type de retour d' Task. DelayAsync a une instruction d' Return qui retourne un entier. Par conséquent la déclaration de fonction de les besoins d' DelayAsync d'avoir un type de retour d' Task(Of Integer). Étant donné que le type de retour est Task(Of Integer), l'évaluation de l'expression d' Await dans DoSomethingAsync produit un entier. Cela est illustré dans cette instruction : Dim result As Integer = Await delayTask.
La procédure d' startButton_Click est un exemple d'une procédure d' Async Sub . Étant donné qu' DoSomethingAsync est une fonction d' Async , la tâche de l'appel à DoSomethingAsync doit être attendue, comme l'instruction suivante montre : Await DoSomethingAsync(). La procédure d' startButton_ClickSub doit être définie avec le modificateur d' Async car il a une expression d' Await .
' Imports System.Diagnostics
' Imports System.Threading.Tasks
' This Click event is marked with the Async modifier.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
Await DoSomethingAsync()
End Sub
Private Async Function DoSomethingAsync() As Task
Dim delayTask As Task(Of Integer) = DelayAsync()
Dim result As Integer = Await delayTask
' The previous two statements may be combined into
' the following statement.
' Dim result As Integer = Await DelayAsync()
Debug.WriteLine("Result: " & result)
End Function
Private Async Function DelayAsync() As Task(Of Integer)
Await Task.Delay(100)
Return 5
End Function
' Output:
' Result: 5
Voir aussi
Tâches
Comment : utiliser une classe générique (Visual Basic)
Procédures de dépannage (Visual Basic)
Référence
Sub, instruction (Visual Basic)
Liste de paramètres (Visual Basic)
Dim, instruction (Visual Basic)
Call, instruction (Visual Basic)
Expression de fonction (Visual Basic)
Concepts
Procédures Function (Visual Basic)