Compartilhar via


Como: Criar uma expressão lambda

Uma expressão lambda é uma função sem um nome que avalia uma única expressão e retorna seu valor.

Para criar uma expressão lambda

  1. Dentro de um método, em qualquer situação em que um tipo delegate 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))
    

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 da classe Enumerable requer que um delegado Boolean como seu argumento.O expressão lambda no exemplo será enviada para essa finalidade.Ela retorna True para cada processo que tem apenas um segmento, e aqueles selecionados na filteredQuery.

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: PASS procedimentos como outro procedimento no Visual Basic

Conceitos

Delegados e o operador AddressOf

Expressões Lambda

Introdução ao LINQ no Visual Basic

Referência

Instrução Function (Visual Basic)

Instrução Delegate

Enumerable