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

Élément

Description

interface

Requis. Nom d'une interface implémentée par la classe ou la structure conteneur de cette procédure.

definedname

Requis. Nom par lequel la procédure est définie dans interface.

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

Élément

Description

eventvariable

Requis. Variable objet déclarée avec le type de données de la classe ou de la structure qui déclenche l'événement.

event

Requis. Nom de l'événement géré par cette procédure.

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)

Of, clause (Visual Basic)

Expression de fonction (Visual Basic)

Concepts

Procédures Function (Visual Basic)

Tableaux de paramètres (Visual Basic)

Expressions lambda (Visual Basic)