Function 문(Visual Basic)Function Statement (Visual Basic)

프로시저를 정의 하는 이름, 매개 변수 및 코드를 선언 Function 합니다.Declares the name, parameters, and code that define a Function procedure.

구문Syntax

[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Function ]
    [ statements ]
End Function

부분Parts

  • attributelist

    선택 사항입니다.Optional. 특성 목록을 참조 하십시오.See Attribute List.

  • accessmodifier

    선택 사항입니다.Optional. 다음 중 하나일 수 있습니다.Can be one of the following:

    Access levels in Visual Basic을 참조하세요.See Access levels in Visual Basic.

  • proceduremodifiers

    선택 사항입니다.Optional. 다음 중 하나일 수 있습니다.Can be one of the following:

  • Shared

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

  • Shadows

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

  • Async

    선택 사항입니다.Optional. Async를 참조 하세요.See Async.

  • Iterator

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

  • name

    필수 요소.Required. 프로시저의 이름입니다.Name of the procedure. Declared Element Names을 참조하세요.See Declared Element Names.

  • typeparamlist

    선택 사항입니다.Optional. 제네릭 프로시저에 대 한 형식 매개 변수 목록입니다.List of type parameters for a generic procedure. 형식 목록을 참조 하십시오.See Type List.

  • parameterlist

    선택 사항입니다.Optional. 이 프로시저의 매개 변수를 나타내는 지역 변수 이름 목록입니다.List of local variable names representing the parameters of this procedure. 매개 변수 목록을 참조 하세요.See Parameter List.

  • returntype

    필요한 경우 Option StrictOn합니다.Required if Option Strict is On. 이 프로시저에서 반환 하는 값의 데이터 형식입니다.Data type of the value returned by this procedure.

  • Implements

    선택 사항입니다.Optional. 이 프로시저에서 하나 이상의 Function 프로시저를 구현 하 고 각각이 프로시저의 포함 하는 클래스 또는 구조체에 의해 구현 된 인터페이스에 정의 됨을 나타냅니다.Indicates that this procedure implements one or more Function procedures, each one defined in an interface implemented by this procedure's containing class or structure. Implements 문을 참조 하세요.See Implements Statement.

  • implementslist

    Implements가 제공된 경우 필수입니다.Required if Implements is supplied. 구현할 Function 프로시저 목록입니다.List of Function procedures being implemented.

    implementedprocedure [ , implementedprocedure ... ]

    implementedprocedure에는 다음과 같은 구문과 요소가 있습니다.Each implementedprocedure has the following syntax and parts:

    interface.definedname

    부분Part DescriptionDescription
    interface 필수 요소.Required. 이 프로시저에 포함 된 클래스 또는 구조체에 의해 구현 된 인터페이스의 이름입니다.Name of an interface implemented by this procedure's containing class or structure.
    definedname 필수 요소.Required. 프로시저가 interface에 정의되는 이름입니다.Name by which the procedure is defined in interface.
  • Handles

    선택 사항입니다.Optional. 이 프로시저가 하나 이상의 특정 이벤트를 처리할 수 있음을 나타냅니다.Indicates that this procedure can handle one or more specific events. 핸들을 참조 하세요.See Handles.

  • eventlist

    Handles가 제공된 경우 필수입니다.Required if Handles is supplied. 이 프로시저가 처리 하는 이벤트 목록입니다.List of events this procedure handles.

    eventspecifier [ , eventspecifier ... ]

    eventspecifier에는 다음과 같은 구문과 요소가 있습니다.Each eventspecifier has the following syntax and parts:

    eventvariable.event

    부분Part DescriptionDescription
    eventvariable 필수 요소.Required. 이벤트를 발생 시키는 클래스 또는 구조체의 데이터 형식으로 선언 된 개체 변수입니다.Object variable declared with the data type of the class or structure that raises the event.
    event 필수 요소.Required. 이 프로시저가 처리 하는 이벤트의 이름입니다.Name of the event this procedure handles.
  • statements

    선택 사항입니다.Optional. 이 프로시저 내에서 실행할 문 블록입니다.Block of statements to be executed within this procedure.

  • End Function

    이 프로시저의 정의를 종료 합니다.Terminates the definition of this procedure.

설명Remarks

모든 실행 코드는 프로시저 내에 있어야 합니다.All executable code must be inside a procedure. 각 프로시저는 클래스, 구조체 또는 포함 하는 클래스, 구조체 또는 모듈 이라고 하는 모듈 내에서 선언 됩니다.Each procedure, in turn, is declared within a class, a structure, or a module that is referred to as the containing class, structure, or module.

호출 코드에 값을 반환 하려면 프로시저를 사용 하 Function 고, 그렇지 않은 경우 프로시저를 사용 Sub 합니다.To return a value to the calling code, use a Function procedure; otherwise, use a Sub procedure.

함수 정의Defining a Function

Function모듈 수준 에서만 프로시저를 정의할 수 있습니다.You can define a Function procedure only at the module level. 따라서 함수의 선언 컨텍스트는 클래스, 구조체, 모듈 또는 인터페이스 여야 하며 소스 파일, 네임 스페이스, 프로시저 또는 블록일 수 없습니다.Therefore, the declaration context for a function must be a class, a structure, a module, or an interface and can't be a source file, a namespace, a procedure, or a block. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.For more information, see Declaration Contexts and Default Access Levels.

Function프로시저는 기본적으로 공용 액세스입니다.Function procedures default to public access. 액세스 한정자를 사용 하 여 액세스 수준을 조정할 수 있습니다.You can adjust their access levels with the access modifiers.

프로시저는 Function 프로시저에서 반환 하는 값의 데이터 형식을 선언할 수 있습니다.A Function procedure can declare the data type of the value that the procedure returns. 모든 데이터 형식 또는 열거형, 구조체, 클래스 또는 인터페이스의 이름을 지정할 수 있습니다.You can specify any data type or the name of an enumeration, a structure, a class, or an interface. 매개 변수를 지정 하지 않으면 returntype 프로시저가 반환 Object 됩니다.If you don't specify the returntype parameter, the procedure returns Object.

이 프로시저에서 키워드를 사용 하는 경우 Implements 포함 하는 클래스 또는 구조체에도 Implements 해당 또는 문 바로 다음에 오는 문이 있어야 합니다 Class Structure .If this procedure uses the Implements keyword, the containing class or structure must also have an Implements statement that immediately follows its Class or Structure statement. Implements문에는에 지정 된 각 인터페이스가 포함 되어야 합니다 implementslist .The Implements statement must include each interface that's specified in implementslist. 그러나 인터페이스에서 (의)를 정의 하는 이름은 Function definedname 이 프로시저의 이름과 일치할 필요가 없습니다 (에서 name ).However, the name by which an interface defines the Function (in definedname) doesn't need to match the name of this procedure (in name).

참고

람다 식을 사용 하 여 함수 식을 인라인으로 정의할 수 있습니다.You can use lambda expressions to define function expressions inline. 자세한 내용은 함수 식람다 식을 참조 하세요.For more information, see Function Expression and Lambda Expressions.

함수에서 반환Returning from a Function

Function프로시저가 호출 코드에 반환 되 면 프로시저를 호출한 문 다음에 오는 문을 사용 하 여 실행이 계속 됩니다.When the Function procedure returns to the calling code, execution continues with the statement that follows the statement that called the procedure.

함수에서 값을 반환 하려면 함수 이름에 값을 할당 하거나 문에 포함할 수 있습니다 Return .To return a value from a function, you can either assign the value to the function name or include it in a Return statement.

Return문은 다음 예제와 같이 반환 값을 동시에 할당 하 고 함수를 종료 합니다.The Return statement simultaneously assigns the return value and exits the function, as the following example shows.

Function MyFunction(ByVal j As Integer) As Double
    Return 3.87 * j
End Function

다음 예에서는 함수 이름에 반환 값을 할당 한 myFunction 다음 문을 사용 하 여를 Exit Function 반환 합니다.The following example assigns the return value to the function name myFunction and then uses the Exit Function statement to return.

Function MyFunction(ByVal j As Integer) As Double
    MyFunction = 3.87 * j
    Exit Function
End Function

Exit FunctionReturn 문은 프로시저에서 즉각적인 종료를 발생 시킵니다 Function .The Exit Function and Return statements cause an immediate exit from a Function procedure. 프로시저의 모든 위치에는 개수와 Exit Function Return 문이 모두 표시 될 수 있으며 Exit Function 문과 문을 혼합할 수 있습니다 Return .Any number of Exit Function and Return statements can appear anywhere in the procedure, and you can mix Exit Function and Return statements.

Exit Function에 값을 할당 하지 않고를 사용 하는 경우 name 프로시저는에 지정 된 데이터 형식에 대 한 기본값을 반환 합니다 returntype .If you use Exit Function without assigning a value to name, the procedure returns the default value for the data type that's specified in returntype. returntype 지정 하지 않으면이 프로시저는 Nothing 에 대 한 기본값인을 반환 합니다 Object .If returntype isn't specified, the procedure returns Nothing, which is the default value for Object.

함수 호출Calling a Function

프로시저 Function 이름을 사용 하 여 프로시저를 호출한 다음 식에서 괄호 안의 인수 목록을 사용 합니다.You call a Function procedure by using the procedure name, followed by the argument list in parentheses, in an expression. 인수를 제공 하지 않는 경우에만 괄호를 생략할 수 있습니다.You can omit the parentheses only if you aren't supplying any arguments. 그러나 항상 괄호를 포함 하는 경우 코드를 더 쉽게 읽을 수 있습니다.However, your code is more readable if you always include the parentheses.

Function, 또는와 같은 라이브러리 함수를 호출 하는 것과 동일한 방식으로 프로시저를 호출 합니다 Sqrt Cos ChrW .You call a Function procedure the same way that you call any library function such as Sqrt, Cos, or ChrW.

키워드를 사용 하 여 함수를 호출할 수도 있습니다 Call .You can also call a function by using the Call keyword. 이 경우 반환 값은 무시 됩니다.In that case, the return value is ignored. Call대부분의 경우 키워드를 사용 하지 않는 것이 좋습니다.Use of the Call keyword isn't recommended in most cases. 자세한 내용은 Call 문을 참조 하세요.For more information, see Call Statement.

때로는 산술 식을 다시 정렬 하 여 내부 효율성을 높이는 Visual Basic.Visual Basic sometimes rearranges arithmetic expressions to increase internal efficiency. Function이러한 이유로 함수에서 동일한 식의 변수 값을 변경 하는 경우에는 산술 식에 프로시저를 사용 하지 않아야 합니다.For that reason, you shouldn't use a Function procedure in an arithmetic expression when the function changes the value of variables in the same expression.

비동기 함수Async Functions

비동기 기능을 사용 하면 명시적 콜백을 사용 하거나 여러 함수 또는 람다 식에서 수동으로 코드를 분할 하지 않고도 비동기 함수를 호출할 수 있습니다.The Async feature allows you to invoke asynchronous functions without using explicit callbacks or manually splitting your code across multiple functions or lambda expressions.

비동기 한정자를 사용 하 여 함수를 표시 하는 경우 함수에서 wait 연산자를 사용할 수 있습니다.If you mark a function with the Async modifier, you can use the Await operator in the function. 제어가 Await 함수에서 식에 도달 하면 Async 제어가 호출자에 게 반환 되 고 대기 작업이 완료 될 때까지 함수의 진행률이 일시 중단 됩니다.When control reaches an Await expression in the Async function, control returns to the caller, and progress in the function is suspended until the awaited task completes. 작업이 완료 되 면 함수에서 실행을 다시 시작할 수 있습니다.When the task is complete, execution can resume in the function.

참고

Async프로시저는 아직 완료 되지 않은 첫 번째 대기 개체를 발견 하거나 프로시저 끝에 도달할 때마다 호출자에 게 반환 Async 됩니다.An Async procedure returns to the caller when either it encounters the first awaited object that’s not yet complete, or it gets to the end of the Async procedure, whichever occurs first.

Async함수는 또는의 반환 형식을 사용할 수 Task<TResult> 있습니다 Task .An Async function can have a return type of Task<TResult> or Task. Async반환 형식이 인 함수의 예는 Task<TResult> 다음과 같습니다.An example of an Async function that has a return type of Task<TResult> is provided below.

Async함수는 ByRef 매개 변수를 선언할 수 없습니다.An Async function cannot declare any ByRef parameters.

하위 문은 한정자로 표시 될 수도 있습니다 Async .A Sub Statement can also be marked with the Async modifier. 이는 주로 값을 반환할 수 없는 이벤트 처리기에 사용 됩니다.This is primarily used for event handlers, where a value cannot be returned. 프로시저는 Async Sub 대기 수 없으며 프로시저 호출자는 Async Sub 프로시저에서 throw 된 예외를 catch 할 수 없습니다 Sub .An Async Sub procedure can't be awaited, and the caller of an Async Sub procedure can't catch exceptions that are thrown by the Sub procedure.

함수에 대 한 자세한 내용은 Async Async 및 wait를 사용한 비동기 프로그래밍, 비동기 프로그램의 제어 흐름비동기 반환 형식을 참조 하세요.For more information about Async functions, see Asynchronous Programming with Async and Await, Control Flow in Async Programs, and Async Return Types.

반복기 함수Iterator Functions

반복기 함수는 목록 또는 배열과 같은 컬렉션에 대해 사용자 지정 반복을 수행 합니다.An iterator function performs a custom iteration over a collection, such as a list or array. 반복기 함수는 Yield 문을 사용 하 여 각 요소를 한 번에 하나씩 반환 합니다.An iterator function uses the Yield statement to return each element one at a time. Yield 문에 도달 하면 코드의 현재 위치가 기억 됩니다.When a Yield statement is reached, the current location in code is remembered. 다음에 반복기 함수가 호출되면 해당 위치에서 실행이 다시 시작됩니다.Execution is restarted from that location the next time the iterator function is called.

For Each ...를 사용 하 여 클라이언트 코드에서 반복기를 호출 합니다. 다음 문.You call an iterator from client code by using a For Each…Next statement.

반복기 함수의 반환 형식은,, 또는 일 수 IEnumerable 있습니다 IEnumerable<T> IEnumerator IEnumerator<T> .The return type of an iterator function can be IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>.

자세한 내용은 반복기를 참조 하세요.For more information, see Iterators.

예제Example

다음 예에서는 문을 사용 하 여 Function 프로시저 본문을 구성 하는 이름, 매개 변수 및 코드를 선언 합니다 Function .The following example uses the Function statement to declare the name, parameters, and code that form the body of a Function procedure. ParamArray한정자를 사용 하면 함수에서 다양 한 수의 인수를 사용할 수 있습니다.The ParamArray modifier enables the function to accept a variable number of arguments.

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

예제Example

다음 예제에서는 앞의 예제에서 선언한 함수를 호출 합니다.The following example invokes the function declared in the preceding example.

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

예제Example

다음 예제에서 DelayAsyncAsync Function 반환 형식이 인입니다 Task<TResult> .In the following example, DelayAsync is an Async Function that has a return type of Task<TResult>. DelayAsync 에는 정수를 반환하는 Return 문이 포함됩니다.DelayAsync has a Return statement that returns an integer. 따라서의 함수 선언에는 DelayAsync 의 반환 형식이 있어야 Task(Of Integer) 합니다.Therefore the function declaration of DelayAsync needs to have a return type of Task(Of Integer). 반환 형식이 이므로 Task(Of Integer) Await 의 식 계산에서 정수를 생성 합니다 DoSomethingAsync .Because the return type is Task(Of Integer), the evaluation of the Await expression in DoSomethingAsync produces an integer. 이에 대 한 설명은 다음과 같습니다 Dim result As Integer = Await delayTask .This is demonstrated in this statement: Dim result As Integer = Await delayTask.

프로시저는 startButton_Click 프로시저의 예입니다 Async Sub .The startButton_Click procedure is an example of an Async Sub procedure. 는 함수 이기 때문에 DoSomethingAsync Async 에 대 한 호출에 대 한 작업은 DoSomethingAsync 다음 문과 같이 대기 되어야 합니다 Await DoSomethingAsync() ..Because DoSomethingAsync is an Async function, the task for the call to DoSomethingAsync must be awaited, as the following statement demonstrates: Await DoSomethingAsync(). startButton_Click Sub 프로시저에 Async 식이 있으므로 한정자를 사용 하 여 프로시저를 정의 해야 합니다 Await .The startButton_Click Sub procedure must be defined with the Async modifier because it has an Await expression.

' 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

참고 항목See also