방법: 람다 식 만들기(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 대리자가 인수로 필요합니다.이 예제의 람다 식이 해당 용도로 사용됩니다.하나의 스레드만 있는 각 프로세스에 대해 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(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에서 프로시저에 다른 프로시저 전달