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

    선택 사항입니다. 다음 중 하나일 수 있습니다.

  • Shared

    선택 사항입니다. 공유를 참조하세요.

  • Shadows

    선택 사항입니다. 그림자를 참조하세요.

  • Async

    선택 사항입니다. 비동기 참조

  • Iterator

    선택 사항입니다. 반복기를 참조하세요.

  • name

    필수 사항입니다. 프로시저의 이름입니다. Declared Element Names을 참조하세요.

  • typeparamlist

    선택 사항입니다. 제네릭 프로시저의 형식 매개 변수 목록입니다. 형식 목록을 참조하세요.

  • parameterlist

    선택 사항입니다. 이 프로시저의 매개 변수를 나타내는 지역 변수 이름 목록입니다. 매개 변수 목록을 참조하세요.

  • returntype

    필요한 경우 Option StrictOn합니다. 이 프로시저에서 반환된 값의 데이터 형식입니다.

  • 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각 인터페이스를 포함해야 합니다. 그러나 인터페이스가 (indefinedname)를 정의하는 Function 이름은 이 프로시저의 이름(namein)과 일치할 필요가 없습니다.

참고

람다 식을 사용하여 함수 식을 인라인으로 정의할 수 있습니다. 자세한 내용은 함수 식람다 식을 참조하세요.

함수에서 반환

프로시저가 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 프로시저에서 즉시 종료됩니다Function.Return 프로시저의 Exit Function 모든 수와 Return 문은 어디에서나 나타날 수 있으며, 혼합 Exit FunctionReturn 문을 사용할 수 있습니다.

값을 name할당하지 않고 사용하는 Exit Function 경우 프로시저는 에 지정된 returntype데이터 형식의 기본값을 반환합니다. 지정되지 않은 경우 returntype 프로시저는 기본값Object인 을 반환Nothing합니다.

함수 호출

프로시저 이름을 사용하여 프로시저를 호출한 다음 식에서 인수 목록을 괄호로 하여 프로시저를 호출 Function 합니다. 인수를 제공하지 않는 경우에만 괄호를 생략할 수 있습니다. 그러나 항상 괄호를 포함하는 경우 코드를 더 쉽게 읽을 수 있습니다.

같은 라이브러리 함수SqrtCosFunction 호출하는 것과 동일한 방식으로 프로시저를 호출합니다ChrW.

키워드를 사용하여 함수를 호출할 Call 수도 있습니다. 이 경우 반환 값은 무시됩니다. Call 대부분의 경우 키워드를 사용하지 않는 것이 좋습니다. 자세한 내용은 통화 문을 참조하세요.

Visual Basic 경우에 따라 산술 식을 다시 정렬하여 내부 효율성을 높입니다. 따라서 함수가 동일한 식의 변수 값을 변경하는 경우 산술 식에서 프로시저를 사용하면 Function 안 됩니다.

비동기 함수

비동기 기능을 사용하면 명시적 콜백을 사용하거나 여러 함수 또는 람다 식 간에 코드를 수동으로 분할하지 않고 비동기 함수를 호출할 수 있습니다.

비동기 한정자로 함수를 표시하는 경우 함수에서 Await 연산자를 사용할 수 있습니다. 컨트롤이 함수의 AwaitAsync 식에 도달하면 컨트롤이 호출자에게 반환되고 대기 중인 작업이 완료될 때까지 함수의 진행률이 일시 중단됩니다. 작업이 완료되면 함수에서 실행을 다시 시작할 수 있습니다.

참고

프로시저가 Async 아직 완료되지 않은 첫 번째 대기 개체를 발견하거나 프로시저의 Async 끝에 도달하면 호출자에게 반환됩니다.

함수의 Async 반환 형식 Task<TResult> 또는 Task. 반환 형식이 Async 있는 함수의 Task<TResult> 예는 다음과 같습니다.

함수는 AsyncByRef 매개 변수를 선언할 수 없습니다.

하위 문은 한정자를 사용하여 Async 표시할 수도 있습니다. 이는 주로 값을 반환할 수 없는 이벤트 처리기에 사용됩니다. 프로시저를 AsyncSub 대기할 수 없으며 프로시저의 AsyncSub 호출자는 프로시저에서 throw Sub 된 예외를 catch할 수 없습니다.

함수에 대한 Async 자세한 내용은 Async 및 Await를 사용한 비동기 프로그래밍, 비동기 프로그램의 컨트롤 Flow비동기 반환 형식을 참조하세요.

반복기 함수

반복기 함수는 목록 또는 배열과 같은 컬렉션에 대해 사용자 지정 반복을 수행합니다. 반복기 함수는 Yield 문을 사용하여 각 요소를 한 번에 하나씩 반환합니다. Yield 문에 도달하면 코드의 현재 위치가 기억됩니다. 다음에 반복기 함수가 호출되면 해당 위치에서 실행이 다시 시작됩니다.

For Each...를 사용하여 클라이언트 코드에서 반복기를 호출합니다 . 다음 문입니다.

반복기 함수의 반환 형식은 , IEnumerable<T>또는 IEnumeratorIEnumerator<T>.일 수 있습니다IEnumerable.

자세한 내용은 반복기를 참조하세요.

예 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

다음 예제 DelayAsyncAsyncFunction 에서는 반환 형식 Task<TResult>이 .입니다. DelayAsync 에는 정수를 반환하는 Return 문이 포함됩니다. 따라서 함수 선언에는 DelayAsync 반환 형식 Task(Of Integer)이 있어야 합니다. 반환 형식이기 Task(Of Integer)때문에 식의 Await 계산은 DoSomethingAsync 정수(integer)를 생성합니다. 이 설명은 다음 문 Dim result As Integer = Await delayTask에 설명되어 있습니다.

프로 startButton_Click 시저는 프로시저의 예입니다 Async Sub . DoSomethingAsync 함수이므로 Async 다음 문에서 보여 Await DoSomethingAsync()주듯이 호출에 DoSomethingAsync 대한 태스크가 대기되어야 합니다. 프로시저에는 startButton_ClickSub 식이 Async 있으므로 한정자를 사용하여 프로시저를 Await 정의해야 합니다.

' 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

참고 항목