함수는 액션을 수행할 수 있습니다. 함수를 호출할 때 값을 반환하는 것도 그중 하나입니다. 이 값을 결과(result) 라고 합니다.
예를 들어 GetRandomInt(1, 10)
을 호출하면 1~10 사이의 integer 하나가 무작위로 반환됩니다.
함수에 필요한 값의 타입 을 변경하려면 함수 시그니처(function signature) 의 타입을 변경해야 합니다. 예를 들면 다음과 같습니다.
GetNumberOfMousetrapsYouCanAfford() : int
이 예시에서 GetNumberOfMousetrapsYouCanAfford()
에는 반환 타입 int
가 있으므로, 코드에서 GetNumberOfMousetrapsYouCanAfford()
를 호출할 때마다 정수가 반환될 것이라 기대할 수 있습니다.
GetNumberOfMousetrapsYouCanAfford() : float
한편 타입을 float
로 변경했다면 다른 값을 반환했을 것입니다.
함수에 반환 타입이 지정되어 있으면 함수 바디(코드 블록) 는 해당 타입과 일치하는 결과를 반환해야 합니다. 그러지 않으면 코드가 컴파일되지 않으므로 컴파일러 오류가 발생합니다. 이 문제를 방지할 방법을 알아봅시다.
결과 및 반환
결과 는 함수가 실행(executes (runs)) 되면 반환(returns) 하는 값입니다.
2강에서 키워드 에 관해 배웠습니다.
Verse에 내장된 특수한 단어인 키워드에는 아주 구체적인 액션이 지정되어 있습니다. Verse에서는 return 또한 return 키워드 뒤 표현식의 결과로 발생하는 값을 제공하도록 함수에 명령하는 키워드 입니다.
MyFunction() : int =
return 5
OnBegin<override>()<suspend> : void =
MyFunction() # 결과는 5
위 예시에서 이 코드는 MyFunction()
이 호출되었을 때 5
를 값으로 반환 합니다.
return
을 누락해도 함수에서 오류가 발생하지는 않지만, 명시적으로 return
을 포함하는 것이 바람직합니다. 이에 관한 자세한 내용은 함수를 참고하세요.
조기 반환
프로그램이 return
표현식을 실행하면 프로그램은 즉시 함수 코드 블록을 종료(exit) 합니다. 즉 return
표현식을 다른 코드 앞에 배치한 경우 그 뒤의 코드는 실행되지 않습니다. 이 방법은 지정된 조건이 충족되면 함수가 조기에 종료되도록 할 때 유용합니다.
다음 함수는 CoinsPerMouseTrap
에 따라 Coins
변수를 업데이트합니다. 하지만 쥐덫을 구매하려면 Coins
변수가 양수로 설정되어 있어야 합니다. Coins
가 음수인 경우 함수는 오류 메시지를 출력하고 즉시 반환합니다. 함수 바디의 나머지 코드를 실행할 이유가 없기 때문입니다.
return이 없다면 함수는 Coins
의 값을 잘못 줄이고, Coins
가 음수임을 표시하지 못합니다.
var Coins : int = -10
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
Print(“Mousetrap bought! You have {Coins} coins left.”)

함수를 return
으로 조기 종료하면 버그가 발생할 수 있으므로 주의해서 사용해야 합니다. 예를 들어 아래 코드에서는 return
이 Print("Mousetrap bought! You have {Coins} coins left.")
보다 먼저 실행되므로 함수가 Coins
의 새로운 값을 출력하지 않습니다.
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
return
Print(“Mousetrap bought! You have {Coins} coins left.”)
코드에 조기 return
이 있어도 컴파일은 되지만, Visual Studio Code에서는 return
함수 이후의 표현식이 실행되지 않는다는 경고가 표시됩니다.
유용한 결과가 없는 함수 Void 처리하기
결과는 필요할 때도 있고 필요 없을 때도 있습니다.
2강에서 배운 타입에 관해 기억한다면, 각 타입에 특별한 종류의 값이 필요하다는 것도 기억할 수 있을 겁니다. 아래에 아주 짧은 목록이 있습니다. Verse에서는 다양한 함수를 사용하지만 아래 목록의 타입을 가장 자주 사용하며, 이러한 타입은 변수와 상수를 사용하기 위한 기반이기도 합니다.
타입 | 설명 | 값 |
---|---|---|
logic |
이 타입은 true 또는 false만 값으로 가질 수 있습니다. | true / false |
int |
integer는 분수가 아닌 정수를 의미하며, int 는 integer의 줄임말입니다. |
정수 |
float |
float는 분수처럼 정수가 아닌 값에 사용하는 타입입니다. | 소수점이 있는 수 |
string |
모든 텍스트를 위한 타입입니다. 문자, 숫자, 문장 부호, 공백은 물론 이모지도 여기 포함됩니다. 😻 | 문자, 숫자, 문장 부호, 공백, 이모지 |
결과를 생성할 필요가 없는 함수를 생성할 때, 함수의 반환 타입을 void
로 설정할 수 있습니다.
코드 블록의 마지막 표현식은 어느 타입의 결과든지 반환할 수 있으며 함수의 반환 타입이 void 로 설정되었기 때문에 컴파일러 오류가 생기지 않는다는 의미입니다.
void 타입이 있는 함수에 대해서도 return
키워드를 사용할 수 있지만 return
키워드로 값을 제공할 필요는 없습니다.
요약
- 결과 는 함수를 호출하면 함수에서 반환되는 값입니다.
- 코드 블록에서 마지막 표현식은 결과 를 도출합니다.
- 함수에서 값 의 타입을 변경하려면 함수 시그니처 의 타입 을 변경해야 합니다.
- return 은 뒤따르는 표현식에서 결과로 나오는 값을 제공하도록 함수에 명령하는 키워드입니다.
- 조기 반환 은 코드 블록이 종료되기 전에 코드 블록에서 return 키워드를 사용하는 경우를 의미합니다. 조기 반환을 사용하면 프로그램이 해당 코드 블록을 즉시 종료 하며, 코드 블록의 나머지 부분은 실행하지 않습니다.
- void 는 함수의 값이 어디에도 사용되지 않는다고 명시하는 타입입니다. 혹은 번거롭게 값에 신경 쓸 필요가 없다고 알려주는 타입이라고 할 수도 있습니다. 결과를 도출할 필요가 없는 함수의 타입으로 void를 사용할 수 있습니다.