KOROMOON

착한 사마리아인이 되고 싶습니다.

3/21/2020

VBScript - Sub 프로시저 & Function 프로시저


< Sub 프로시저와 Function 프로시저 차이 >



( 1 ) Sub 프로시저

Sub 프로시저는 Sub 문과 End Sub 문으로 묶어진 일련의 VBScript 명령문으로 동작을 수행하지만 그 값을 반환하지는 않음.

Sub 프로시저에서는 호출하는 프로시저가 전달하는 상수, 변수 또는 식으로 된 인수를 사용할 수 있음.
Sub 프로시저에서 인수가 없으면 해당 Sub 문에 빈 괄호가 있어야 함.

아래 Sub 프로시저는 내장(기본적으로 제공되는) VBScript 함수 두 개, 즉 MsgBox와 InputBox를 사용하여 사용자에게 정보를 알려줌.
그런 다음 해당 정보에 따른 계산 결과를 표시함.
VBScript를 사용하여 만든 Function 프로시저에서 계산이 수행됨.

Sub ConvertTemp()
    temp = InputBox("화씨 온도를 입력하십시오.", 1)
    MsgBox "섭씨 " & Celsius(temp) & " 도입니다."
End Sub



( 2 ) Function 프로시저

Function 프로시저는 Function 문과 End Function 문으로 묶어진 일련의 VBScript 명령문임.
Function 프로시저는 Sub 프로시저와 비슷하지만 값을 반환하는 점이 다름.
Function 프로시저에서는 호출하는 프로시저가 전달하는 상수, 변수 또는 식으로 된 인수를 사용할 수 있음.
Function 프로시저에서 인수가 없으면 해당 Function 문에 빈 괄호가 있어야 함. Function 문은 해당 프로시저에 있는 하나 이상의 명령문에서 그 이름에 값을 할당하는 방법으로 값을 반환함.
Function 문의 반환 데이터 형식은 언제나 Variant 임.

아래 예제에서 Celsius 함수는 화씨 온도를 섭씨 온도로 계산함.
ConvertTemp Sub 프로시저의 함수를 호출하면 인수 값을 가지고 있는 변수를 그 함수에 전달하고, 호출한 프로시저에 계산 결과를 반환하여 메시지 상자에 표시함.

Sub ConvertTemp()
    temp = InputBox("화씨 온도를 입력하십시오.", 1)
    MsgBox "섭씨 " & Celsius(temp) & "도입니다."
End Sub

Function Celsius(fDegrees)
    Celsius = (fDegrees - 32) * 5 / 9
End Function



( 3 ) 프로시저 안팎으로 데이터 전달

각 데이터는 인수를 사용하는 프로시저에 전달됨.
인수는 프로시저에 전달할 데이터의 자리 표시자 역할을 함.
변수 이름으로 유효한 것이면 모두 인수로 사용할 수 있음.
Sub 문이나 Function 문을 사용하여 프로시저를 작성하면 프로시저 이름 뒤에 괄호가 있어야 함.
모든 인수는 괄호 안에 쉼표로 구분하여 둠.

예를 들어, 아래 예제에서 fDegrees는 온도를 변환하는 Celsius 함수에 전달할 값의 자리 표시자임.

Function Celsius(fDegrees)
    Celsius = (fDegrees - 32) * 5 / 9
End Function

데이터를 프로시저 밖으로 가져오려면 Function 문을 사용해야 함.
Function 프로시저는 값을 반환할 수 있지만 Sub 프로시저는 값을 반환할 수 없음.



( 4 ) 코드에서의 Sub 프로시저와 Function 프로시저 사용

코드에 있는 Function 프로시저는 언제나 변수 할당이나 식의 오른쪽에 사용해야 함.
예를 들어 다음과 같음.

Temp = Celsius(fDegrees)

-또는-

MsgBox "섭씨 " & Celsius(fDegrees) & "도입니다."

다른 프로시저의 Sub 프로시저를 호출하려면 각각 쉼표로 구분된 필요한 인수들의 값과 함께 프로시저 이름을 입력함.
Call 문은 사용할 필요가 없지만, 이를 사용할 경우 인수를 괄호로 묶어야 함.

아래 예제에서는 MyProc 프로시저를 두 번 호출함.
한 번은 코드 안의 Call 문을 사용하는 대신 다른 한 번은 사용하지 않음.
그러나 두 호출 모두 똑같은 작업을 수행함.

Call MyProc(firstarg, secondarg)
MyProc firstarg, secondarg

Call 문을 사용하지 않을 경우에는 괄호를 생략한다는 점에 유의할 것!



============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기