Como criar uma expressão do Lambda (Visual Basic)

Uma expressão lambda é uma função ou sub-rotina que não tem um nome. Uma expressão lambda pode ser usada sempre que um tipo de delegado for válido.

Para criar uma função de expressão lambda de linha única

  1. Em qualquer situação em que um tipo de delegado possa ser usado, digite a palavra-chave Function, como no exemplo a seguir:

    Dim add1 = Function

  2. Entre parênteses, logo após Function, digite os parâmetros da função. Observe que você não especifica um nome após Function.

    Dim add1 = Function (num As Integer)

  3. Após a lista de parâmetros, digite uma única expressão como o corpo da função. O valor que a expressão avalia é o valor retornado pela função. Você não usa uma As cláusula para especificar o tipo de retorno.

    Dim add1 = Function(num As Integer) num + 1
    

    Você chama a expressão lambda passando um argumento inteiro.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Alternativamente, o mesmo resultado é obtido pelo seguinte exemplo:

    Console.WriteLine((Function(num As Integer) num + 1)(5))
    

Para criar uma sub-rotina de expressão lambda de linha única

  1. Em qualquer situação em que um tipo de delegado possa ser usado, digite a palavra-chave Sub, conforme mostrado no exemplo a seguir.

    Dim add1 = Sub

  2. Entre parênteses, logo após Sub, digite os parâmetros da sub-rotina. Observe que você não especifica um nome após Sub.

    Dim add1 = Sub (msg As String)

  3. Após a lista de parâmetros, digite uma única instrução como o corpo da sub-rotina.

    Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
    

    Você chama a expressão lambda passando um argumento de cadeia de caracteres.

    ' The following line prints "Hello".
    writeMessage("Hello")
    

Para criar uma função de expressão lambda de várias linhas

  1. Em qualquer situação em que um tipo de delegado possa ser usado, digite a palavra-chave Function, conforme mostrado no exemplo a seguir.

    Dim add1 = Function

  2. Entre parênteses, logo após Function, digite os parâmetros da função. Observe que você não especifica um nome após Function.

    Dim add1 = Function (index As Integer)

  3. Prima ENTER. A End Function instrução é adicionada automaticamente.

  4. Dentro do corpo da função, adicione o seguinte código para criar uma expressão e retornar o valor. Você não usa uma As cláusula para especificar o tipo de retorno.

    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
    

    Você chama a expressão lambda passando um argumento inteiro.

    Dim sortColumn = getSortColumn(0)
    

Para criar uma sub-rotina de expressão lambda de várias linhas

  1. Em qualquer situação em que um tipo de delegado possa ser usado, digite a palavra-chave Sub, conforme mostrado no exemplo a seguir:

    Dim add1 = Sub

  2. Entre parênteses, logo após Sub, digite os parâmetros da sub-rotina. Observe que você não especifica um nome após Sub.

    Dim add1 = Sub (msg As String)

  3. Prima ENTER. A End Sub instrução é adicionada automaticamente.

  4. Dentro do corpo da função, adicione o seguinte código para executar quando a sub-rotina for invocada.

    Dim writeToLog = Sub(msg As String)
                         Dim log As New EventLog()
                         log.Source = "Application"
                         log.WriteEntry(msg)
                         log.Close()
                     End Sub
    

    Você chama a expressão lambda passando um argumento de cadeia de caracteres.

    writeToLog("Application started.")
    

Exemplo

Um uso comum de expressões lambda é definir uma função que pode ser passada como argumento para um parâmetro cujo tipo é Delegate. No exemplo a seguir, o GetProcesses método retorna uma matriz dos processos em execução no computador local. O Where método da Enumerable classe requer um Boolean delegado como seu argumento. A expressão lambda no exemplo é usada para esse fim. Ele retorna True para cada processo que tem apenas um thread, e esses são selecionados em 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

O exemplo anterior é equivalente ao código a seguir, que é escrito na sintaxe 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

Consulte também