方法 : ラムダ式を作成する
更新 : 2007 年 11 月
ラムダ式は、単一の式を評価してその値を返す、名前を持たない関数です。
ラムダ式を作成するには
メソッド内のデリゲート型を使用できる場所に、次の例に示すように、キーワード 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))
使用例
ラムダ式の一般的な使用目的は、Delegate 型のパラメータの引数として渡すことができる関数を定義することです。次の例では、GetProcesses メソッドが、ローカル コンピュータで実行中のプロセスの配列を返します。Enumerable クラスの Where メソッドは、引数として Boolean デリゲートを必要とします。この例では、その目的を果たすために、ラムダ式が送信されます。ラムダ式は、スレッドが 1 つだけあるプロセスで、filteredQuery で選択されたプロセスごとに、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: Language-Integrated Query) 構文で記述された次のコードに相当します。
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 でプロシージャを別のプロシージャに渡す