Share via


Como criar uma expressão lambda (Visual Basic)

A 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 delegate é válido.

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

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

    Dim add1 = Function

  2. Entre parênteses, diretamente 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 corpo da função. O valor que a expressão processará é o valor retornado pela função. Você não usa uma cláusula As para especificar o tipo de retorno.

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

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

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Como alternativa, o mesmo resultado é conseguido no exemplo a seguir:

    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 onde um tipo delegado pode 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)
    

    Chamar a expressão lambda, passando um argumento de seqüência de caracteres.

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

Para criar uma função de expressão lambda multilinha

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

    Dim add1 = Function

  2. Entre parênteses, diretamente 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. Pressione ENTER. O End Function declaraçã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 cláusula As 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 Integer.

    Dim sortColumn = getSortColumn(0)
    

Para criar uma sub-rotina de expressão lambda multilinha

  1. Em qualquer situação onde um tipo delegado pode 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. Pressione ENTER. O End Sub declaração é adicionada automaticamente.

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

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

    Chamar a expressão lambda, passando um argumento de seqüência de caracteres.

    writeToLog("Application started.")
    

Exemplo

Um uso comum de expressões lambda é para definir uma função que pode ser passada como argumento para um parâmetro cujo tipo é Delegate. No exemplo a seguir, o método GetProcesses retorna uma matriz dos processos em execução no computador local. O método Where``1 da classe Enumerable requer que um delegado Boolean como seu argumento. A expressão lambda no exemplo é usada para essa finalidade. Ela retorna True para cada processo que tem apenas um segmento, e aqueles selecionados na 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 está escrito na sintaxe LINQ (Consulta Integrada à Linguagem):

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

Tarefas

Como passar procedimentos para outro procedimento no Visual Basic

Referência

Instrução Function (Visual Basic)

Instrução Sub (Visual Basic)

Instrução Delegate

Enumerable

Conceitos

Expressões lambda (Visual Basic)

Introdução a LINQ no Visual Basic

Outros recursos

Delegados (Visual Basic)