次の方法で共有


方法: ラムダ式を作成する (Visual Basic)

ラムダ式とは、名前を持たない関数またはサブルーチンです。 ラムダ式は、デリゲート型が有効な場所で使用できます。

単一行のラムダ式関数を作成するには

  1. デリゲート型を使用できる場所に、次の例に示すように、キーワード Function を入力します。

    Dim add1 = Function

  2. Function の直後に、関数のパラメーターをかっこで囲んで入力します。 Function の後ろに名前を指定しないことに注意してください。

    Dim add1 = Function (num As Integer)

  3. パラメーター リストの次に、関数の本体として、式を 1 つ入力します。 この式の評価値が、この関数によって返される値になります。 戻り値の型を指定するのに As 句は使用しません。

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

    ラムダ式は、整数の引数を渡すことによって呼び出します。

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. または、次の例のようにしても、同じ結果を得ることができます。

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

単一行のラムダ式サブルーチンを作成するには

  1. デリゲート型を使用できる場所に、次の例に示すように、キーワード Sub を入力します。

    Dim add1 = Sub

  2. Sub の直後に、サブルーチンのパラメーターをかっこで囲んで入力します。 Sub の後ろに名前を指定しないことに注意してください。

    Dim add1 = Sub (msg As String)

  3. パラメーター リストの次に、サブルーチンの本体として、ステートメントを 1 つ入力します。

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

    ラムダ式は、文字列の引数を渡すことによって呼び出します。

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

複数行のラムダ式関数を作成するには

  1. デリゲート型を使用できる場所に、次の例に示すように、キーワード Function を入力します。

    Dim add1 = Function

  2. Function の直後に、関数のパラメーターをかっこで囲んで入力します。 Function の後ろに名前を指定しないことに注意してください。

    Dim add1 = Function (index As Integer)

  3. Enter キーを押します。 End Function ステートメントが自動的に追加されます。

  4. 関数の本体に、式を作成して値を返すための次のコードを追加します。 戻り値の型を指定するのに 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)
    

複数行のラムダ式サブルーチンを作成するには

  1. デリゲート型を使用できる場所に、次の例に示すように、キーワード Sub を入力します。

    Dim add1 = Sub

  2. Sub の直後に、サブルーチンのパラメーターをかっこで囲んで入力します。 Sub の後ろに名前を指定しないことに注意してください。

    Dim add1 = Sub(msg As String)

  3. Enter キーを押します。 End Sub ステートメントが自動的に追加されます。

  4. 関数の本体に、サブルーチンが呼び出されたときに実行する次のコードを追加します。

    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``1 メソッドは、引数として 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)

Sub ステートメント (Visual Basic)

Delegate ステートメント

Enumerable

概念

ラムダ式 (Visual Basic)

Visual Basic における LINQ の概要

その他の技術情報

デリゲート (Visual Basic)