PDC 2008 : Visual Basic 10 (VB10) et les "MultiLines Statements Lambdas"

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

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

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

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

Je vous laisse deviner ce que va renvoyer la MessageBox après l'appel ! :-)