Function 문(Visual Basic)
Function
프로시저를 정의하는 이름, 매개 변수 및 코드를 선언합니다.
구문
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
부분
attributelist
선택 사항. 특성 목록을 참조하세요.
accessmodifier
선택 사항. 다음 중 하나일 수 있습니다.
Access levels in Visual Basic을 참조하세요.
proceduremodifiers
선택 사항. 다음 중 하나일 수 있습니다.
MustOverride Overrides
NotOverridable Overrides
Shared
선택 사항. 공유를 참조하세요.
Shadows
선택 사항. Shadows를 참조하세요.
Async
선택 사항. 비동기를 참조하세요.
Iterator
선택 사항. 반복기를 참조하세요.
name
필수입니다. 프로시저의 이름입니다. Declared Element Names을 참조하세요.
typeparamlist
선택 사항. 제네릭 프로시저의 형식 매개 변수 목록입니다. 형식 목록을 참조하세요.
parameterlist
선택 사항. 이 프로시저의 매개 변수를 나타내는 지역 변수 이름 목록입니다. 매개 변수 목록을 참조하세요.
returntype
Option Strict
가On
인 경우 필수입니다. 이 프로시저에서 반환된 값의 데이터 형식입니다.Implements
선택 사항. 이 프로시저가 하나 이상의
Function
프로시저를 구현함을 나타냅니다. 각 프로시저는 이 프로시저를 포함하는 클래스 또는 구조체에 의해 구현된 인터페이스에 정의됩니다. Implements 문을 참조하세요.implementslist
Implements
가 제공된 경우 필수입니다. 구현할Function
프로시저 목록입니다.implementedprocedure [ , implementedprocedure ... ]
각
implementedprocedure
에는 다음과 같은 구문과 요소가 있습니다.interface.definedname
요소 설명 interface
필수입니다. 이 프로시저를 포함하는 클래스 또는 구조체에 의해 구현된 인터페이스의 이름입니다. definedname
필수입니다. 프로시저가 interface
에 정의되는 이름입니다.Handles
선택 사항. 이 프로시저가 하나 이상의 특정 이벤트를 처리할 수 있음을 나타냅니다. 핸들을 참조하세요.
eventlist
Handles
가 제공된 경우 필수입니다. 이 프로시저가 처리하는 이벤트 목록입니다.eventspecifier [ , eventspecifier ... ]
각
eventspecifier
에는 다음과 같은 구문과 요소가 있습니다.eventvariable.event
요소 설명 eventvariable
필수입니다. 이벤트를 발생시키는 클래스 또는 구조체의 데이터 형식으로 선언된 개체 변수입니다. event
필수입니다. 이 프로시저가 처리하는 이벤트의 이름입니다. statements
선택 사항. 이 프로시저 내에서 실행될 문 블록입니다.
End Function
이 프로시저의 정의를 종료합니다.
설명
모든 실행 코드는 프로시저 내부에 있어야 합니다. 각 프로시저는 클래스, 구조체 또는 포함하는 클래스, 구조체 또는 모듈이라고 하는 모듈 내에서 선언됩니다.
호출 코드에 값을 반환하려면 Function
프로시저를 사용합니다. 그렇지 않으면 Sub
프로시저를 사용합니다.
함수 정의
모듈 수준에서만 Function
프로시저를 정의할 수 있습니다. 따라서 함수의 선언 컨텍스트는 클래스, 구조체, 모듈 또는 인터페이스여야 하며 원본 파일, 네임스페이스, 프로시저 또는 블록이 될 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.
Function
프로시저는 기본적으로 공용 액세스로 설정됩니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다.
Function
프로시저는 프로시저가 반환하는 값의 데이터 형식을 선언할 수 있습니다. 모든 데이터 형식이나 열거형, 구조체, 클래스 또는 인터페이스의 이름을 지정할 수 있습니다. returntype
매개 변수를 지정하지 않으면 프로시저는 Object
를 반환합니다.
이 프로시저가 Implements
키워드를 사용하는 경우 포함 클래스 또는 구조체에는 Class
또는 Structure
문 바로 뒤에 오는 Implements
문도 있어야 합니다. Implements
문은 implementslist
에 지정된 각 인터페이스를 포함해야 합니다. 그러나 인터페이스가 definedname
에 있는 Function
를 정의하는 이름이 name
에 있는 이 프로시저의 이름과 일치할 필요는 없습니다.
함수에서 반환
Function
프로시저가 호출 코드로 반환되면 프로시저를 호출한 문 뒤에 오는 문으로 실행이 계속됩니다.
함수에서 값을 반환하려면 값을 함수 이름에 할당하거나 Return
문에 포함하면 됩니다.
다음 예와 같이 Return
문은 반환 값을 할당하는 동시에 함수를 종료합니다.
Function MyFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
다음 예에서는 반환 값을 함수 이름 myFunction
에 할당한 다음 Exit Function
문을 사용하여 반환합니다.
Function MyFunction(ByVal j As Integer) As Double
MyFunction = 3.87 * j
Exit Function
End Function
Exit Function
및 Return
문은 Function
프로시저를 즉시 종료합니다. Exit Function
및 Return
문은 프로시저의 어느 위치에나 나타날 수 있으며, Exit Function
및 Return
문을 혼합할 수 있습니다.
name
에 값을 할당하지 않고 Exit Function
을 사용하는 경우 프로시저는 returntype
에 할당된 데이터 형식에 대한 기본값을 반환합니다. returntype
이 지정되지 않은 경우 프로시저는 Object
의 기본값인 Nothing
을 반환합니다.
함수 호출
식에서 프로시저 이름과 괄호 안의 인수 목록을 사용하여 Function
프로시저를 호출합니다. 인수를 제공하지 않는 경우에만 괄호를 생략할 수 있습니다. 그러나 항상 괄호를 포함하면 코드를 더 쉽게 읽을 수 있습니다.
Sqrt
, Cos
또는 ChrW
와 같은 라이브러리 함수를 호출하는 것과 동일한 방식으로 Function
프로시저를 호출합니다.
Call
키워드를 사용하여 함수를 호출할 수도 있습니다. 이 경우 반환 값은 무시됩니다. 대부분의 경우에는 Call
키워드를 사용하지 않는 것이 좋습니다. 자세한 내용은 Call 문을 참조하세요.
Visual Basic에서는 내부 효율성을 높이기 위해 산술 식을 다시 정렬하는 경우가 있습니다. 이러한 이유로 함수가 동일한 식의 변수 값을 변경할 때 산술 식에서 Function
프로시저를 사용하면 안 됩니다.
비동기 함수
비동기 함수를 사용하면 명시적인 콜백을 사용하거나 여러 함수 또는 람다 식에 코드를 수동으로 분할하지 않고도 비동기 함수를 호출할 수 있습니다.
함수에 Async 한정자를 표시하면 함수에서 Await 연산자를 사용할 수 있습니다. 제어가 Async
함수의 Await
식에 도달하면 제어가 호출자에게 반환되고 대기 중인 작업이 완료될 때까지 함수의 진행이 일시 중단됩니다. 작업이 완료되면 함수에서 실행이 다시 시작될 수 있습니다.
참고 항목
Async
프로시저는 아직 완료되지 않은 첫 번째 대기 개체를 발견하거나 Async
프로시저의 끝에 도달하는 경우 중 먼저 발생하는 경우 호출자에게 반환됩니다.
Async
함수는 Task<TResult> 또는 Task 반환 형식을 가질 수 있습니다. 반환 형식이 Task<TResult>인 Async
함수의 예가 아래에 제공됩니다.
Async
함수는 ByRef 매개 변수를 선언할 수 없습니다.
Sub 문은 Async
한정자로 표시될 수도 있습니다. 이는 주로 값을 반환할 수 없는 이벤트 처리기에 사용됩니다. Async
Sub
프로시저를 기다릴 수 없으며 Async
Sub
프로시저 호출자는 Sub
프로시저에서 throw되는 예외를 catch할 수 없습니다.
Async
함수에 대한 자세한 내용은 Async 및 Await를 사용한 비동기 프로그래밍, 비동기 프로그램의 제어 흐름 및 비동기 반환 형식을 참조하세요.
iterator 함수
반복기 함수는 목록이나 배열과 같은 컬렉션에 대해 사용자 지정 반복을 수행합니다. 반복기 함수는 Yield 문을 사용하여 각 요소를 한 번에 하나씩 반환합니다. Yield 문에 도달하면 코드의 현재 위치가 기억됩니다. 다음에 반복기 함수가 호출되면 해당 위치에서 실행이 다시 시작됩니다.
For Each…Next을 사용하여 클라이언트 코드에서 반복기를 호출합니다.
반복기 함수의 반환 형식은 IEnumerable, IEnumerable<T>, IEnumerator 또는 IEnumerator<T>일 수 있습니다.
자세한 내용은 반복기를 참조하세요.
예 1
다음 예에서는 Function
문을 사용하여 Function
프로시저의 본문을 구성하는 이름, 매개 변수 및 코드를 선언합니다. ParamArray
한정자를 사용하면 함수가 다양한 개수의 인수를 허용할 수 있습니다.
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
예제 2
다음 예에서는 이전 예에서 선언된 함수를 호출합니다.
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
End Module
예 3
다음 예에서 DelayAsync
은(는) 반환 형식이 Task<TResult>인 Async
Function
입니다. DelayAsync
에는 정수를 반환하는 Return
문이 포함됩니다. 따라서 DelayAsync
의 함수 선언에는 Task(Of Integer)
의 반환 형식이 있어야 합니다. 반환 형식이 Task(Of Integer)
이므로 DoSomethingAsync
의 Await
식 계산에서 정수가 생성됩니다. 이는 다음 문에서 설명합니다. Dim result As Integer = Await delayTask
.
startButton_Click
프로시저는 Async Sub
프로시저의 예입니다. DoSomethingAsync
는 Async
함수이기 때문에 다음 문에서 보여 주는 것처럼 DoSomethingAsync
호출에 대한 작업을 기다려야 합니다. Await DoSomethingAsync()
. startButton_Click
Sub
프로시저에는 Await
식이 있으므로 Async
한정자로 정의해야 합니다.
' Imports System.Diagnostics
' Imports System.Threading.Tasks
' This Click event is marked with the Async modifier.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
Await DoSomethingAsync()
End Sub
Private Async Function DoSomethingAsync() As Task
Dim delayTask As Task(Of Integer) = DelayAsync()
Dim result As Integer = Await delayTask
' The previous two statements may be combined into
' the following statement.
' Dim result As Integer = Await DelayAsync()
Debug.WriteLine("Result: " & result)
End Function
Private Async Function DelayAsync() As Task(Of Integer)
Await Task.Delay(100)
Return 5
End Function
' Output:
' Result: 5
참고 항목
.NET