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 ! 🙂


 

Comments (0)