LAMBDA FUNCTIONS

Lambda functions are functions that are defined within the flow of the program’s code. Often they are defined, used, and forgotten in a single statement without ever being given a name.

To define a lambda function for later use, start with the Function keyword. Add the function’s name and any parameters that it requires, followed by a single statement that evaluates to the value that the function should return.

Next include either (1) a single statement that evaluates to the value that the function should return, or (2) a function body that ends with an End Function statement.

The following code fragment shows examples of both of these styles:

Dim square_it = Function(n As Integer) n * n
Dim factorial = Function(n As Integer) As Integer
                    Dim result As Integer = 1
                    For i As Integer = 2 To n
                        result *= i
                    Next i
                    Return result
                End Function
 
Debug.WriteLine(square_it(5))
Debug.WriteLine(factorial(5))

The code first creates a lambda function named square_it that takes parameter n and returns n * n. It then creates a multiline lambda function named factorial that calculates and returns a number’s factorial. The code finishes by calling both functions and displaying their results.

Example program LambdaFunction, which is available for download on the book’s website, contains the following code fragment:

' Define a lambda function that adds two integers.
Dim plus = Function(i1 As Integer, i2 As Integer) i1 + i2
 
' Get A and B.
Dim A As Integer = Integer.Parse(txtA.Text)
Dim B As Integer = Integer.Parse(txtB.Text)
 
' Call the lambda function to calculate the result.
txtResult.Text = plus(A, B).ToString

This code starts by defining a variable named plus. This variable holds a reference to a lambda function that takes two integers as parameters and returns their sum. The code then gets input values from text boxes and calls the plus function, passing it those values. It converts the result into a string and displays it in the txtResult text box.

This example creates a variable to hold a reference to a lambda function and then invokes the function by using that variable. It could just as easily have invoked the lambda function itself while defining it.

Example program InlineFunction, which is also available for download on the book’s website, demonstrates this in the following line of code. This line defines the function and invokes it without ever saving a reference to it.

txtResult.Text =
    (Function(i1 As Integer, i2 As Integer) i1 + i2)(A, B).ToString

Because lambda functions are declared in a single line of code, they are also called inline functions. A lambda function defined inside a subroutine or function is also sometimes called a nested function.


LAMBDA OR INLINE?
To the extent that anyone distinguishes between lambda and inline functions, the preceding example is more properly called an inline function because the function is contained within the line that uses it and is never given a name. The examples before that one are more properly called lambda functions because they create functions (square_it, factorial, and plus) with references that are used later.

No matter which method the program uses to define a lambda function, it could then pass the function to another routine that will later call the function. For example, suppose subroutine PerformCalculations takes as a parameter the function it should use to perform its calculations. The following code shows how a program could call subroutine PerformCalculations while passing it the previous lambda functions:

' Define the plus function.
Dim plus = Function(i1 As Integer, i2 As Integer) i1 + i2
 
' Call PerformCalculations passing it the lambda function.
PerformCalculations(plus)
 
' Call PerformCalculations passing it an inline lambda function.
PerformCalculations(Function(i1 As Integer, i2 As Integer) i1 + i2)

Inline functions were invented for use by LINQ and are most often used with LINQ. For more information about LINQ, see Chapter 20, “LINQ.”

In addition to lambda functions, you can write lambda subroutines that are similar to lambda functions except they don’t return a value.

The following code defines two named lambda subroutines. The first does all of its work on a single line whereas the second uses the multiline format. After defining the subroutines, the code invokes them to display two messages.

Dim write_msg = Sub(msg As String) Debug.WriteLine("write_msg: " & msg)
Dim show_msg = Sub(msg As String)
                   MessageBox.Show("show_msg: " & msg)
               End Sub
 
write_msg("Hi")
show_msg("Hi again")

As with lambda functions, you can build and pass a lambda subroutine into another routine as a parameter.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.147.44.118