loop 표현식 을 사용하면 루프의 반복작업마다 loop 블록 내의 표현식이 반복됩니다.
아래의 포트나이트 깔끔한 싹쓸이 이모트 GIF 예시를 통해 loop 가 어떻게 작동하는지 볼 수 있습니다. GIF는 끝까지 재생된 후 처음부터 반복되며, 플레이어가 이모트를 실행하는 것은 loop 블록 내의 표현식으로 나타낼 수 있습니다.
# GIF
loop:
DoCleanSweepEmote()
GIF와 마찬가지로 loop 블록도 별도의 인스트럭션이 없다면 무한히 반복됩니다. 이를 무한 루프 라고 합니다.
무한 루프는 프로그램의 진행을 막으므로 대부분의 경우 유용하지 않습니다. 따라서 Verse는 무한 루프를 종료하거나 정지할 방법을 제공합니다.
- 종료 : 루프는
break또는return을 통해 종료할 수 있습니다. - 정지 : 루프는
async표현식에서 사용될 때 정지할 수 있습니다. 자세한 내용은 동시성 개요를 참조하세요.
하나의 루프에서 종료와 정지를 둘 다 할 수도 있습니다. 다음 loop 블록에서는 랜덤으로 생성된 숫자가 20보다 작을 때까지 루프가 반복됩니다.
loop:
# 랜덤 숫자 생성
RandomNumber : int = GetRandomInt(0, 100)
# 랜덤 숫자가 20보다 작은지 확인
if (RandomNumber < 20):
# loop 종료
break
이 코드의 구문은 아래와 같습니다.
expression0
loop:
expression-block
if (test-arg-block):
break
expression-block
expression2
다른 컨트롤 플로 표현식과 달리, loop 표현식은 void를 반환합니다. 따라서 결과를 반환하는 표현식이 필요하다면 loop 표현식은 적절하지 않습니다. 루프가 함수 안에 있다면 return 으로 값을 반환할 수도 있지만, 이 경우 루프뿐 아니라 함수에서도 나가게 됩니다.
중첩된 loop 표현식
하나의 루프 안에 다른 루프를 중첩할 수 있습니다. 첫 번째 루프를 외부 루프 라고 부르고, 두 번째 루프를 내부 루프 라고 부릅니다. 내부 루프 안에서 break 표현식이 실행되면, 내부 루프만 중단하고 나갑니다.
아래 예시에서는 외부 루프가 expression3 까지 계속되고, 내부 루프가 종료된 후의 if 표현식에서 외부 루프를 나가거나 expression1 과 내부 루프가 다시 실행될 수 있습니다.
expression0
# 외부 루프
loop:
expression1
# 내부 루프
loop:
expression2
if (test-arg-block0):
# 내부 루프 종료
break
expression3
if (test-arg-block1):
# 외부 루프 종료
break
expression4