방법: 람다 식 만들기(Visual Basic)

람다 식은 이름이 없는 함수 또는 서브루틴입니다. 대리자 형식이 유효한 모든 곳에서 람다 식을 사용할 수 있습니다.

한 줄 람다 식 함수를 만들려면

  1. 대리자 형식을 사용할 수 있는 모든 상황에서 다음 예제와 같이 키워드 Function을 입력합니다.

    Dim add1 = Function

  2. Function 바로 뒤의 괄호 안에 함수의 매개 변수를 입력합니다. Function 뒤에는 이름을 지정하지 않습니다.

    Dim add1 = Function (num As Integer)

  3. 매개 변수 목록 다음에 함수의 본문으로 단일 식을 입력합니다. 식이 계산하는 값은 함수에서 반환된 값입니다. 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. 매개 변수 목록 다음에 서브루틴의 본문으로 단일 문을 입력합니다.

    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 메서드에는 Boolean 대리자가 해당 인수로 필요합니다. 예제의 람다 식은 해당 용도로 사용되었습니다. 스레드가 하나뿐이고 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(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

참고 항목