====== Sub / Function ======
CUBLOC2에서 서브루틴(Sub)과 함수(Function)는 코드를 구조화하는 핵심 요소입니다. 두 방식의 가장 큰 차이점은 반환값(Return Value)의 유무입니다.
==== 1. Sub (서브루틴) ====
* 특정 작업을 수행하지만, 호출한 곳으로 값을 돌려주지 않습니다.
* 주로 상태 변경, 출력, 하드웨어 제어 등 '동작' 자체에 목적이 있을 때 사용합니다.
' Sub 정의 (인자가 있는 경우)
Sub PrintStatus(Value As Integer)
Debug "현재 상태: ", Dec Value
End Sub
' Sub 정의 (인자가 없는 경우)
Sub SayHello()
Debug "안녕하세요!"
End Sub
' Sub 호출
PrintStatus(100)
SayHello() ' 인자가 없어도 괄호를 붙여 호출합니다.
==== 2. Function (함수) ====
* 특정 계산이나 처리를 수행한 후 그 결과를 호출한 곳으로 반환합니다.
* 반환할 데이터 타입을 선언해야 하며, 함수 이름에 값을 대입하여 반환값을 지정합니다.
' Function 정의 (정수형 반환)
Function Add(A As Integer, B As Integer) As Integer
Add = A + B ' 함수 이름에 값을 대입하여 반환
End Function
' Function 정의 (인자 없이 값만 반환하는 경우)
Function GetVersion() As Single
GetVersion = 1.0
End Function
' Function 호출
Dim Result As Integer
Result = Add(10, 20)
Debug "버전: ", Fp GetVersion()
==== 3. 루틴 종료 (Exit Sub / Exit Function) ====
* 루틴을 끝까지 실행하지 않고, 특정 조건에서 즉시 종료하고 빠져나올 때 사용합니다.
Sub CheckLimit(Value As Integer)
If Value > 100 Then
Debug "범위 초과로 중단합니다."
Exit Sub
End If
Debug "정상 범위입니다: ", Dec Value
End Sub
===== 인자(Argument)에 대하여 =====
==== 1. 인자란? ====
* 서브루틴이나 함수를 실행할 때 넘겨주는 데이터를 인자라고 합니다.
* 예: PrintStatus(100)에서 100이 바로 인자입니다.
==== 2. 값 복사 방식 ====
* 모든 인자는 값을 그대로 복사해서 전달합니다.
* 루틴 내부에서 값을 변경해도 원본 변수에는 영향을 주지 않습니다.
==== 3. 원본 데이터를 수정하려면 ====
* 기본적으로 원본 변수 직접 수정은 지원하지 않습니다.
* 다음 방법을 사용합니다.
* 1차원 배열 활용
* 전역 변수 활용
==== 사용 예시 ====
Dim A As Integer = 10
Test(A)
Do
Loop
Sub Test(Value As Integer)
Value = 20 ' 원본 A는 변하지 않음
End Sub
[[..:index|← CUBLOC2 목차로 돌아가기]]