Comment : créer une expression lambda (Visual Basic)
Une expression lambda est une fonction ou une sous-routine qui n'a pas de nom. Une expression lambda peut être utilisée chaque fois qu'un type délégué est valide.
Pour créer une fonction d'expression lambda sur une ligne
Dans tous les cas où un type délégué peut être utilisé, tapez le mot clé Function, comme dans l'exemple suivant :
Dim add1 = Function
Entre parenthèses, directement après Function, tapez les paramètres de la fonction. Notez que vous ne spécifiez pas de nom après Function.
Dim add1 = Function (num As Integer)
À la suite de la liste de paramètres, tapez une expression unique comme corps de la fonction. La valeur que prend l'expression est celle retournée par la fonction. Vous n'utilisez pas de clause As pour spécifier le type de retour.
Dim add1 = Function(num As Integer) num + 1
Vous appelez l'expression lambda en passant un argument entier.
' The following line prints 6. Console.WriteLine(add1(5))
Le même résultat est également obtenu par l'exemple suivant :
Console.WriteLine((Function(num As Integer) num + 1)(5))
Pour créer une sous-routine d'expression lambda sur une ligne
Dans tous les cas où un type délégué peut être utilisé, tapez le mot clé Sub, comme dans l'exemple suivant.
Dim add1 = Sub
Entre parenthèses, directement après Sub, tapez les paramètres de la sous-routine. Notez que vous ne spécifiez pas de nom après Sub.
Dim add1 = Sub (msg As String)
À la suite de la liste de paramètres, tapez une instruction unique comme corps de la sous-routine.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
Vous appelez l'expression lambda en passant un argument de chaîne.
' The following line prints "Hello". writeMessage("Hello")
Pour créer une fonction d'expression lambda sur plusieurs lignes
Dans tous les cas où un type délégué peut être utilisé, tapez le mot clé Function, comme dans l'exemple suivant.
Dim add1 = Function
Entre parenthèses, directement après Function, tapez les paramètres de la fonction. Notez que vous ne spécifiez pas de nom après Function.
Dim add1 = Function (index As Integer)
Appuyez sur ENTRÉE. L'instruction End Function est ajoutée automatiquement.
Dans le corps de la fonction, ajoutez le code suivant pour créer une expression et retourner la valeur. Vous n'utilisez pas de clause As pour spécifier le type de retour.
Dim getSortColumn = Function(index As Integer) Select Case index Case 0 Return "FirstName" Case 1 Return "LastName" Case 2 Return "CompanyName" Case Else Return "LastName" End Select End Function
Vous appelez l'expression lambda en passant un argument entier.
Dim sortColumn = getSortColumn(0)
Pour créer une sous-routine d'expression lambda sur plusieurs lignes
Dans tous les cas où un type délégué peut être utilisé, tapez le mot clé Sub, comme dans l'exemple suivant :
Dim add1 = Sub
Entre parenthèses, directement après Sub, tapez les paramètres de la sous-routine. Notez que vous ne spécifiez pas de nom après Sub.
Dim add1 = Sub(msg As String)
Appuyez sur ENTRÉE. L'instruction End Sub est ajoutée automatiquement.
Dans le corps de la fonction, ajoutez le code suivant à exécuter lorsque la sous-routine est appelée.
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End Sub
Vous appelez l'expression lambda en passant un argument de chaîne.
writeToLog("Application started.")
Exemple
Les expressions lambda sont couramment utilisées pour définir une fonction qui peut être passée comme argument pour un paramètre dont le type est Delegate. Dans l'exemple suivant, la méthode GetProcesses retourne un tableau des processus en cours d'exécution sur l'ordinateur local. La méthode Where``1 de la classe Enumerable requiert un délégué Boolean comme argument. L'expression lambda de l'exemple est utilisée à cette fin. Elle retourne la valeur True pour chacun des processus possédant un thread unique, ceux-ci étant sélectionnés dans filteredList.
Sub Main()
' Create an array of running processes.
Dim procList As Process() = Diagnostics.Process.GetProcesses
' Return the processes that have one thread. Notice that the type
' of the parameter does not have to be explicitly stated.
Dim filteredList = procList.Where(Function(p) p.Threads.Count = 1)
' Display the name of each selected process.
For Each proc In filteredList
MsgBox(proc.ProcessName)
Next
End Sub
L'exemple précédent est équivalent au code suivant, écrit en syntaxe LINQ (Language Integrated Query) :
Sub Main()
Dim filteredQuery = From proc In Diagnostics.Process.GetProcesses
Where proc.Threads.Count = 1
Select proc
For Each proc In filteredQuery
MsgBox(proc.ProcessName)
Next
End Sub
Voir aussi
Tâches
Comment : passer des procédures à une autre procédure en Visual Basic
Référence
Function, instruction (Visual Basic)
Sub, instruction (Visual Basic)
Concepts
Expressions lambda (Visual Basic)
Introduction à LINQ dans Visual Basic