方法: ラムダ式を作成する (Visual Basic)
ラムダ式とは、名前を持たない関数またはサブルーチンです。ラムダ式は、デリゲート型が有効な場所で使用できます。
単一行のラムダ式関数を作成するには
デリゲート型を使用できる場所に、次の例に示すように、キーワード Function を入力します。
Dim add1 = Function
Function の直後に、関数のパラメーターをかっこで囲んで入力します。Function の後ろに名前を指定しないことに注意してください。
Dim add1 = Function (num As Integer)
パラメーター リストの次に、関数の本体として、式を 1 つ入力します。この式の評価値が、この関数によって返される値になります。戻り値の型を指定するのに As 句は使用しません。
Dim add1 = Function(num As Integer) num + 1
ラムダ式は、整数の引数を渡すことによって呼び出します。
' The following line prints 6. Console.WriteLine(add1(5))
または、次の例のようにしても、同じ結果を得ることができます。
Console.WriteLine((Function(num As Integer) num + 1)(5))
単一行のラムダ式サブルーチンを作成するには
デリゲート型を使用できる場所に、次の例に示すように、キーワード Sub を入力します。
Dim add1 = Sub
Sub の直後に、サブルーチンのパラメーターをかっこで囲んで入力します。Sub の後ろに名前を指定しないことに注意してください。
Dim add1 = Sub (msg As String)
パラメーター リストの次に、サブルーチンの本体として、ステートメントを 1 つ入力します。
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
ラムダ式は、文字列の引数を渡すことによって呼び出します。
' The following line prints "Hello". writeMessage("Hello")
複数行のラムダ式関数を作成するには
デリゲート型を使用できる場所に、次の例に示すように、キーワード Function を入力します。
Dim add1 = Function
Function の直後に、関数のパラメーターをかっこで囲んで入力します。Function の後ろに名前を指定しないことに注意してください。
Dim add1 = Function (index As Integer)
Enter キーを押します。End Function ステートメントが自動的に追加されます。
関数の本体に、式を作成して値を返すための次のコードを追加します。戻り値の型を指定するのに As 句は使用しません。
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
ラムダ式は、整数の引数を渡すことによって呼び出します。
Dim sortColumn = getSortColumn(0)
複数行のラムダ式サブルーチンを作成するには
デリゲート型を使用できる場所に、次の例に示すように、キーワード Sub を入力します。
Dim add1 = Sub
Sub の直後に、サブルーチンのパラメーターをかっこで囲んで入力します。Sub の後ろに名前を指定しないことに注意してください。
Dim add1 = Sub(msg As String)
Enter キーを押します。End Sub ステートメントが自動的に追加されます。
関数の本体に、サブルーチンが呼び出されたときに実行する次のコードを追加します。
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End Sub
ラムダ式は、文字列の引数を渡すことによって呼び出します。
writeToLog("Application started.")
使用例
ラムダ式の一般的な使用目的は、Delegate 型のパラメーターの引数として渡すことができる関数を定義することです。次の例では、GetProcesses メソッドが、ローカル コンピューターで実行中のプロセスの配列を返します。Enumerable クラスの Where メソッドは、引数として Boolean デリゲートを必要とします。この例では、その目的を果たすために、ラムダ式が使用されます。ラムダ式は、スレッドが 1 つだけあるプロセスで、filteredList で選択されたプロセスごとに、True を返します。
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
前のコード例は、統合言語クエリ (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
参照
処理手順
方法 : Visual Basic でプロシージャを別のプロシージャに渡す
関連項目
Function ステートメント (Visual Basic)