Share via


Cómo: Crear una expresión lambda (Visual Basic)

Una expresión lambda es una función o subrutina que no tiene un nombre. Se puede utilizar dondequiera que un tipo delegado sea válido.

Para crear una función de expresión lambda de una sola línea

  1. En cualquier situación en la que se pueda usar un tipo delegado, escriba la palabra clave Function, como en el ejemplo siguiente:

    Dim add1 = Function

  2. Entre paréntesis, directamente después de Function, escriba los parámetros de la función. Observe que no se especifica un nombre después de Function.

    Dim add1 = Function (num As Integer)

  3. Después de la lista de parámetros, escriba una sola expresión como cuerpo de la función. El valor de la expresión es el valor devuelto por la función. No se usa una cláusula As para especificar el tipo de valor devuelto.

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

    Se llama a la expresión lambda pasando un argumento de tipo entero.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. También se obtiene el mismo resultado con el siguiente ejemplo:

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

Para crear una subrutina de expresión lambda de una sola línea

  1. En cualquier situación en la que se pueda usar un tipo delegado, escriba la palabra clave Sub, como se muestra en el ejemplo siguiente.

    Dim add1 = Sub

  2. Entre paréntesis, directamente después de Sub, escriba los parámetros de la subrutina. Observe que no se especifica un nombre después de Sub.

    Dim add1 = Sub (msg As String)

  3. Después de la lista de parámetros, escriba una sola instrucción como cuerpo de la subrutina.

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

    Se llama a la expresión lambda pasando un argumento de cadena.

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

Para crear una función de expresión lambda de varias líneas

  1. En cualquier situación en la que se pueda usar un tipo delegado, escriba la palabra clave Function, como se muestra en el ejemplo siguiente.

    Dim add1 = Function

  2. Entre paréntesis, directamente después de Function, escriba los parámetros de la función. Observe que no se especifica un nombre después de Function.

    Dim add1 = Function (index As Integer)

  3. Presione ENTRAR. La instrucción End Function se agregará automáticamente.

  4. En el cuerpo de la función, agregue el código siguiente para crear una expresión y devolver el valor. No se usa una cláusula As para especificar el tipo de valor devuelto.

    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
    

    Se llama a la expresión lambda pasando un argumento de tipo entero.

    Dim sortColumn = getSortColumn(0)
    

Para crear una subrutina de expresión lambda de varias líneas

  1. En cualquier situación en la que se pueda usar un tipo delegado, escriba la palabra clave Sub, como se muestra en el ejemplo siguiente:

    Dim add1 = Sub

  2. Entre paréntesis, directamente después de Sub, escriba los parámetros de la subrutina. Observe que no se especifica un nombre después de Sub.

    Dim add1 = Sub(msg As String)

  3. Presione ENTRAR. La instrucción End Sub se agregará automáticamente.

  4. En el cuerpo de la función, agregue el código siguiente para su ejecución cuando se llama a la subrutina.

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

    Se llama a la expresión lambda pasando un argumento de cadena.

    writeToLog("Application started.")
    

Ejemplo

Las expresiones lambda se suelen usar para definir una función que se puede pasar como argumento de un parámetro cuyo tipo es Delegate. En el ejemplo siguiente, el método GetProcesses devuelve una matriz de los procesos que se ejecutan en el equipo local. El método Where de la clase Enumerable requiere un delegado de tipo Boolean como argumento. La expresión lambda del ejemplo se utiliza con ese fin. Devuelve True para cada uno de los procesos que tienen solamente un subproceso, los cuales están seleccionados en 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

El ejemplo anterior es equivalente al código siguiente, escrito con la sintaxis de Language-Integrated Query (LINQ):

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

Vea también

Tareas

Cómo: Pasar procedimientos a otro procedimiento en Visual Basic

Referencia

Function (Instrucción, Visual Basic)

Sub (Instrucción, Visual Basic)

Delegate (Instrucción)

Enumerable

Conceptos

Lambda (expresiones) (Visual Basic)

Introducción a LINQ en Visual Basic

Otros recursos

Delegados (Visual Basic)