方法: ラムダ式を作成する (Visual Basic)
"ラムダ式" は、名前のない関数またはサブルーチンです。 ラムダ式は、デリゲート型が有効であれば使用できます。
単一行のラムダ式関数を作成するには
デリゲート型を使用できる場合、次の例に示すように、キーワード
Function
を入力します。Dim add1 =
Function
Function
の直後のかっこ内に、関数のパラメーターを入力します。Function
の後に名前を指定しないことに注意してください。Dim add1 = Function
(num As Integer)
パラメーター リストの後に、関数の本体として単一の式を入力します。 式が評価される値は、関数によって返される値です。
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)
パラメーター リストの後に、サブルーチンの本体として単一のステートメントを入力します。
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 つしかないプロセスごとに True
が返されます。それらは 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
前の例は、統合言語クエリ (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
関連項目
.NET