Dans ce post, je vais vous présenter la nouvelle fonctionnalité appelée "MultiLines Statements Lambdas" et introduite dans Visual Basic 10 (VB10). Prenons le code suivant :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim mesChiffres = {2, 3, 4, 5, 6} Dim monThread As New Threading.Thread(AddressOf maMéthode) monThread.Start(mesChiffres) monThread.Join() End Sub Private Sub maMéthode(ByVal valeurs As Integer()) For Each valeur As Integer In valeurs Console.WriteLine(valeur) Next End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mesChiffres = {2, 3, 4, 5, 6} Dim monThread As New Threading.Thread(AddressOf maMéthode)
monThread.Start(mesChiffres) monThread.Join()
End Sub
Private Sub maMéthode(ByVal valeurs As Integer())
For Each valeur As Integer In valeurs
Console.WriteLine(valeur)
Next
Le problème dans ce code est qu'on est obligé de créer une méthode simplement pour pouvoir exécuter du code dans un nouveau thread. En effet, le constructor de la classe Thread attend un pointeur vers une fonction (AddressOf).
Et bien grâce aux "Multlines Statements Lambdas", nous allons pouvoir incorporer le code que l'on souhaite exécuter en lieu et place du paramètre AddressOf dès que nécessaire. Voici ce que le code va donner avec Visual Basic 10 :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim mesChiffres = {2, 3, 4, 5, 6} Dim monThread As New Threading.Thread( Sub() For Each valeur As Integer In mesChiffres Console.WriteLine(valeur) Next End Sub) monThread.Start() monThread.Join() End Sub
Dim mesChiffres = {2, 3, 4, 5, 6} Dim monThread As New Threading.Thread( Sub() For Each valeur As Integer In mesChiffres
Next End Sub)
monThread.Start() monThread.Join()
On peut également déclarer des fonctions si nécessaire. Imaginons que nous ayons la définition d'un Delegate comme suit :
Private Delegate Function MonDelegate(ByVal valeur As Integer)
Imaginons maintenant qu'une méthode attende en paramètre ce Delegate :
Private Sub MaMethode(ByVal leDelegate As MonDelegate) MessageBox.Show(leDelegate(1993)) End Sub
Private Sub MaMethode(ByVal leDelegate As MonDelegate)
MessageBox.Show(leDelegate(1993))
Et bien grâce aux "Multilines Statements Lambda", voici comment on peut incorporer le code de notre fonction directement dans l'appel de la méthode :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MaMethode( Function(valeur As Integer) If valeur < 1993 Then Return "Rien dans l'histoire des clubs Français" Else Return "Marseille seul club champion d'Europe" End If End Function) End Sub
MaMethode( Function(valeur As Integer) If valeur < 1993 Then Return "Rien dans l'histoire des clubs Français" Else Return "Marseille seul club champion d'Europe" End If End Function)
Je vous laisse deviner ce que va renvoyer la MessageBox après l'appel ! :-)