Function, instruction (Visual Basic)Function Statement (Visual Basic)

Déclare le nom, paramètres et le code qui définissent une Function procédure.Declares the name, parameters, and code that define a Function procedure.

SyntaxeSyntax

[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Function ]
    [ statements ]
End Function

ComposantsParts

  • attributelist

    Facultatif.Optional. Consultez liste d’attributs.See Attribute List.

  • accessmodifier

    Facultatif.Optional. Il peut s'agir d'une des valeurs suivantes :Can be one of the following:

    Consultez Access levels in Visual Basic.See Access levels in Visual Basic.

  • proceduremodifiers

    Facultatif.Optional. Il peut s'agir d'une des valeurs suivantes :Can be one of the following:

  • Shared

    Facultatif.Optional. Consultez partagé.See Shared.

  • Shadows

    Facultatif.Optional. Consultez Shadows.See Shadows.

  • Async

    Facultatif.Optional. Consultez Async.See Async.

  • Iterator

    Facultatif.Optional. Consultez itérateur.See Iterator.

  • name

    Obligatoire.Required. Nom de la procédure.Name of the procedure. Consultez Declared Element Names.See Declared Element Names.

  • typeparamlist

    Facultatif.Optional. Liste de paramètres de type pour une procédure générique.List of type parameters for a generic procedure. Consultez tapez liste.See Type List.

  • parameterlist

    Facultatif.Optional. Liste des noms de variables locales qui représentent les paramètres de cette procédure.List of local variable names representing the parameters of this procedure. Consultez liste de paramètres.See Parameter List.

  • returntype

    Obligatoire si Option Strict est On.Required if Option Strict is On. Type de données de la valeur retournée par cette procédure.Data type of the value returned by this procedure.

  • Implements

    Facultatif.Optional. Indique que cette procédure implémente un ou plusieurs Function procédures, chacune étant définie dans une interface implémentée par la classe ou la structure conteneur de cette procédure.Indicates that this procedure implements one or more Function procedures, each one defined in an interface implemented by this procedure's containing class or structure. Consultez implémente instruction.See Implements Statement.

  • implementslist

    Obligatoire si Implements est utilisé.Required if Implements is supplied. Liste des procédures Function en cours d'implémentation.List of Function procedures being implemented.

    implementedprocedure [ , implementedprocedure ... ]

    Chaque implementedprocedure emploie la syntaxe et les éléments suivants :Each implementedprocedure has the following syntax and parts:

    interface.definedname

    ÉlémentPart DescriptionDescription
    interface Obligatoire.Required. Nom d’une interface implémentée par cette procédure classe ou la structure conteneur.Name of an interface implemented by this procedure's containing class or structure.
    definedname Obligatoire.Required. Nom par lequel la procédure est définie dans interface.Name by which the procedure is defined in interface.
  • Handles

    Facultatif.Optional. Indique que cette procédure peut gérer un ou plusieurs événements spécifiques.Indicates that this procedure can handle one or more specific events. Consultez gère.See Handles.

  • eventlist

    Obligatoire si Handles est utilisé.Required if Handles is supplied. Liste des événements qui que gère cette procédure.List of events this procedure handles.

    eventspecifier [ , eventspecifier ... ]

    Chaque eventspecifier emploie la syntaxe et les éléments suivants :Each eventspecifier has the following syntax and parts:

    eventvariable.event

    ÉlémentPart DescriptionDescription
    eventvariable Obligatoire.Required. Variable objet déclarée avec le type de données de la classe ou structure qui déclenche l’événement.Object variable declared with the data type of the class or structure that raises the event.
    event Obligatoire.Required. Nom de l’événement que gère cette procédure.Name of the event this procedure handles.
  • statements

    Facultatif.Optional. Bloc d’instructions à exécuter dans cette procédure.Block of statements to be executed within this procedure.

  • End Function

    Termine la définition de cette procédure.Terminates the definition of this procedure.

NotesRemarks

Tout le code exécutable doit être à l’intérieur d’une procédure.All executable code must be inside a procedure. Chaque procédure, à son tour, est déclarée dans une classe, une structure ou un module qui correspond à la classe de conteneur, la structure ou le module.Each procedure, in turn, is declared within a class, a structure, or a module that is referred to as the containing class, structure, or module.

Pour retourner une valeur au code appelant, utilisez un Function procédure ; sinon, utilisez un Sub procédure.To return a value to the calling code, use a Function procedure; otherwise, use a Sub procedure.

Définition d’une fonctionDefining a Function

Vous pouvez définir un Function procédure uniquement au niveau du module.You can define a Function procedure only at the module level. Par conséquent, le contexte de déclaration pour une fonction doit être une classe, une structure, un module ou une interface et ne peut pas être un fichier source, un espace de noms, une procédure ou un bloc.Therefore, the declaration context for a function must be a class, a structure, a module, or an interface and can't be a source file, a namespace, a procedure, or a block. Pour plus d’informations, consultez Contextes de déclaration et niveaux d’accès par défaut.For more information, see Declaration Contexts and Default Access Levels.

Function les procédures par défaut d’un accès public.Function procedures default to public access. Vous pouvez ajuster leurs niveaux d’accès avec les modificateurs d’accès.You can adjust their access levels with the access modifiers.

Un Function procédure peut déclarer le type de données de la valeur de retour de la procédure.A Function procedure can declare the data type of the value that the procedure returns. Vous pouvez spécifier n’importe quel type de données ou le nom d’une énumération, une structure, une classe ou une interface.You can specify any data type or the name of an enumeration, a structure, a class, or an interface. Si vous ne spécifiez pas le returntype , la procédure retourne Object.If you don't specify the returntype parameter, the procedure returns Object.

Si cette procédure utilise le Implements mot clé, la classe de conteneur ou la structure doit également avoir un Implements instruction qui suit immédiatement sa Class ou Structure instruction.If this procedure uses the Implements keyword, the containing class or structure must also have an Implements statement that immediately follows its Class or Structure statement. Le Implements instruction doit inclure chaque interface spécifiée dans implementslist.The Implements statement must include each interface that's specified in implementslist. Toutefois, le nom par lequel une interface définit les Function (dans definedname) n’a pas besoin de correspondre au nom de cette procédure (dans name).However, the name by which an interface defines the Function (in definedname) doesn't need to match the name of this procedure (in name).

Notes

Vous pouvez utiliser des expressions lambda pour définir des expressions de fonction inline.You can use lambda expressions to define function expressions inline. Pour plus d’informations, consultez Expression de fonction et Expressions Lambda.For more information, see Function Expression and Lambda Expressions.

Retour d’une fonctionReturning from a Function

Lorsque le Function procédure retourne au code appelant, l’exécution se poursuit avec l’instruction qui suit l’instruction qui a appelé la procédure.When the Function procedure returns to the calling code, execution continues with the statement that follows the statement that called the procedure.

Pour retourner une valeur à partir d’une fonction, vous pouvez affecter la valeur pour le nom de fonction ou l’inclure dans un Return instruction.To return a value from a function, you can either assign the value to the function name or include it in a Return statement.

La Return instruction assigne la valeur de retour simultanément et quitte la fonction, comme le montre l’exemple suivant.The Return statement simultaneously assigns the return value and exits the function, as the following example shows.

Function MyFunction(ByVal j As Integer) As Double
    Return 3.87 * j
End Function

L’exemple suivant affecte la valeur de retour pour le nom de fonction myFunction et utilise ensuite la Exit Function instruction à retourner.The following example assigns the return value to the function name myFunction and then uses the Exit Function statement to return.

Function MyFunction(ByVal j As Integer) As Double
    MyFunction = 3.87 * j
    Exit Function
End Function

Le Exit Function et Return instructions provoquent la sortie immédiate à partir d’un Function procédure.The Exit Function and Return statements cause an immediate exit from a Function procedure. Un nombre quelconque de Exit Function et Return instructions peuvent apparaître n’importe où dans la procédure, et vous pouvez combiner Exit Function et Return instructions.Any number of Exit Function and Return statements can appear anywhere in the procedure, and you can mix Exit Function and Return statements.

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 qui est spécifié dans returntype.If you use Exit Function without assigning a value to name, the procedure returns the default value for the data type that's specified in returntype. Si returntype n’est pas spécifié, la procédure retourne Nothing, qui est la valeur par défaut Object.If returntype isn't specified, the procedure returns Nothing, which is the default value for Object.

Appel d’une fonctionCalling a Function

Vous appelez un Function procédure en utilisant le nom de la procédure, suivi de la liste d’arguments entre parenthèses, dans une expression.You call a Function procedure by using the procedure name, followed by the argument list in parentheses, in an expression. Vous pouvez omettre les parenthèses uniquement si vous ne fournissez des arguments.You can omit the parentheses only if you aren't supplying any arguments. Toutefois, votre code est plus lisible si vous incluez toujours les parenthèses.However, your code is more readable if you always include the parentheses.

Vous appelez un Function procédure fonctionne de la même façon que vous appelez n’importe quelle bibliothèque comme Sqrt, Cos, ou ChrW.You call a Function procedure the same way that you call any library function such as Sqrt, Cos, or ChrW.

Vous pouvez également appeler une fonction à l’aide de la Call mot clé.You can also call a function by using the Call keyword. Dans ce cas, la valeur de retour est ignorée.In that case, the return value is ignored. Utilisation de la Call mot clé n’est pas recommandé dans la plupart des cas.Use of the Call keyword isn't recommended in most cases. Pour plus d’informations, consultez instruction Call.For more information, see Call Statement.

Visual Basic réorganise quelquefois les expressions arithmétiques pour améliorer les performances internes.Visual Basic sometimes rearranges arithmetic expressions to increase internal efficiency. Pour cette raison, vous ne devez pas utiliser un Function procédure dans une expression arithmétique quand la fonction modifie la valeur des variables dans la même expression.For that reason, you shouldn't use a Function procedure in an arithmetic expression when the function changes the value of variables in the same expression.

Fonctions asynchronesAsync Functions

Le Async fonctionnalité vous permet d’appeler des fonctions asynchrones sans utiliser de rappels explicites ni fractionner manuellement votre code entre plusieurs fonctions ou expressions lambda.The Async feature allows you to invoke asynchronous functions without using explicit callbacks or manually splitting your code across multiple functions or lambda expressions.

Si vous marquez une fonction avec la Async modificateur, vous pouvez utiliser la Await opérateur dans la fonction.If you mark a function with the Async modifier, you can use the Await operator in the function. Quand le contrôle atteint une Await expression dans le Async fonction, contrôle retourne à l’appelant et la progression dans la fonction est interrompue jusqu'à ce que la tâche attendue se termine.When control reaches an Await expression in the Async function, control returns to the caller, and progress in the function is suspended until the awaited task completes. Lorsque la tâche est terminée, l’exécution peut reprendre dans la fonction.When the task is complete, execution can resume in the function.

Notes

Un Async procédure retourne à l’appelant quand il rencontre le premier objet await qui n’est pas encore terminé ou qu’il arrive à la fin de la Async procédure, selon ce qui se produit en premier.An Async procedure returns to the caller when either it encounters the first awaited object that’s not yet complete, or it gets to the end of the Async procedure, whichever occurs first.

Un Async fonction peut avoir un type de retour Task<TResult> ou Task.An Async function can have a return type of Task<TResult> or Task. Un exemple d’un Async fonction qui a un type de retour de Task<TResult> est fourni ci-dessous.An example of an Async function that has a return type of Task<TResult> is provided below.

Un Async fonction ne peut pas déclarer de ByRef paramètres.An Async function cannot declare any ByRef parameters.

Un Sub, instruction peut également être marquée avec le Async modificateur.A Sub Statement can also be marked with the Async modifier. Cela est principalement utilisé pour les gestionnaires d’événements, où une valeur ne peut pas être retournée.This is primarily used for event handlers, where a value cannot be returned. Un Async Sub procédure ne peut pas être attendue et l’appelant d’une Async Sub procédure ne peut pas intercepter les exceptions levées par le Sub procédure.An Async Sub procedure can't be awaited, and the caller of an Async Sub procedure can't catch exceptions that are thrown by the Sub procedure.

Pour plus d’informations sur Async fonctions, consultez programmation asynchrone avec Async et Await, flux de contrôle dans les programmes Async, et Types de retour Async.For more information about Async functions, see Asynchronous Programming with Async and Await, Control Flow in Async Programs, and Async Return Types.

Fonctions d’itérateurIterator Functions

Un itérateur fonction effectue une itération personnalisée sur une collection, comme une liste ou un tableau.An iterator function performs a custom iteration over a collection, such as a list or array. Une fonction d’itérateur utilise le Yield instruction pour retourner chaque élément un par un.An iterator function uses the Yield statement to return each element one at a time. Quand un Yield instruction est atteinte, l’emplacement actuel dans le code est mémorisé.When a Yield statement is reached, the current location in code is remembered. L’exécution est redémarrée à partir de cet emplacement lors de l’appel suivant de la fonction d’itérateur.Execution is restarted from that location the next time the iterator function is called.

Vous appelez un itérateur depuis le code client en utilisant un For Each... Suivant instruction.You call an iterator from client code by using a For Each…Next statement.

Le type de retour d’une fonction d’itérateur peut être IEnumerable, IEnumerable<T>, IEnumerator, ou IEnumerator<T>.The return type of an iterator function can be IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>.

Pour plus d'informations, consultez Itérateurs.For more information, see Iterators.

ExempleExample

L’exemple suivant utilise le Function instruction pour déclarer le nom, le paramètres et le code qui forment le corps d’un Function procédure.The following example uses the Function statement to declare the name, parameters, and code that form the body of a Function procedure. Le ParamArray modificateur permet à la fonction d’accepter un nombre variable d’arguments.The ParamArray modifier enables the function to accept a variable number of 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

ExempleExample

L’exemple suivant appelle la fonction déclarée dans l’exemple précédent.The following example invokes the function declared in the preceding example.

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

ExempleExample

Dans l’exemple suivant, DelayAsync est un Async Function qui a un type de retour Task<TResult>.In the following example, DelayAsync is an Async Function that has a return type of Task<TResult>. DelayAsync a une instruction Return qui retourne un entier.DelayAsync has a Return statement that returns an integer. Par conséquent, la déclaration de fonction de DelayAsync doit avoir un type de retour Task(Of Integer).Therefore the function declaration of DelayAsync needs to have a return type of Task(Of Integer). Étant donné que le type de retour est Task(Of Integer), l’évaluation de la Await expression dans DoSomethingAsync produit un entier.Because the return type is Task(Of Integer), the evaluation of the Await expression in DoSomethingAsync produces an integer. Cela est illustré dans cette déclaration : Dim result As Integer = Await delayTask.This is demonstrated in this statement: Dim result As Integer = Await delayTask.

Le startButton_Click procédure est un exemple d’un Async Sub procédure.The startButton_Click procedure is an example of an Async Sub procedure. Étant donné que DoSomethingAsync est un Async (fonction), la tâche pour l’appel à DoSomethingAsync doit être attendue, comme le montre l’instruction suivante : Await DoSomethingAsync().Because DoSomethingAsync is an Async function, the task for the call to DoSomethingAsync must be awaited, as the following statement demonstrates: Await DoSomethingAsync(). Le startButton_Click Sub procédure doit être définie avec la Async modificateur, car il possède un Await expression.The startButton_Click Sub procedure must be defined with the Async modifier because it has an Await expression.

' 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 aussiSee also