분기문 (Jump Statements)
반복문이나 조건문을 실행하다 보면, 특정 상황에서 루프를 즉시 중단하거나 다음 회차로 건너뛰어야 할 때가 있습니다. 이때 사용하는 것이 Jump Statements, 분기문입니다.
Epscript에서는 break, continue, return 세 가지 주요 분기문을 지원합니다.
1. break
break 문은 현재 실행 중인 반복문(for, while, foreach)이나 switch 문을 즉시 종료하고 빠져나올 때 사용합니다.
활용 예시: 특정 유닛을 찾으면 중단하기
function findTargetUnit() {
// 모든 유닛을 순회하며 체력이 50 이하인 유닛을 하나만 찾습니다.
foreach(cunit : EUDLoopCUnit()) {
if (cunit.hp <= 50 * 256) {
// 조건을 만족하는 유닛을 찾았으므로 루프를 종료합니다.
// 더 이상의 유닛은 검사하지 않습니다.
eprintf("대상 유닛 발견: {}", cunit);
break;
}
}
}
2. continue
continue 문은 반복문의 나머지 코드를 실행하지 않고, 즉시 다음 반복(회차)으로 건너뛸 때 사용합니다. 루프 자체를 끝내지는 않는다는 점이 break와 다릅니다.
활용 예시: 특정 플레이어 제외하고 보상 주기
function giveMineralsExceptP8() {
foreach(cp : EUDLoopPlayer("Human")) {
// 만약 플레이어가 8번째(P8, index 7)라면 건너뜁니다.
if (cp == 7) {
continue;
}
// P8이 아닌 나머지 플레이어들에게만 500 미네랄을 지급합니다.
SetResources(cp, Add, 500, Ore);
}
}
3. return
return 문은 함수의 실행을 즉시 종료하고, 함수를 호출한 곳으로 제어를 돌려줍니다. 필요한 경우 값을 반환할 수도 있습니다.
활용 예시: 조건 검사 후 조기 종료 (Early Return)
function buyItem(cp, itemPrice) {
// 자원이 부족하면 메시지를 띄우고 함수를 바로 종료합니다.
// itemPrice 이상의 미네랄을 가지고 있을 때의 부정문(!)입니다.
if (!Accumulate(cp, AtLeast, itemPrice, Ore)) {
eprintf("미네랄이 부족합니다!");
return; // 아래의 아이템 지급 코드는 실행되지 않습니다.
}
// 자원이 충분할 때만 실행되는 로직
SetResources(cp, Subtract, itemPrice, Ore);
eprintf("아이템을 구매했습니다.");
}
4. 분기문 비교 요약
| 구문 | 설명 | 비고 |
|---|---|---|
break | 반복문을 완전히 탈출 | 가장 가까운 루프 하나를 종료 |
continue | 현재 회차를 중단하고 다음 회차로 이동 | 반복문 조건식 검사 단계로 점프 |
return | 함수 자체를 종료 | 반복문 내부에서 쓰면 반복문과 함수 모두 종료 |
반복문과 성능
break와 continue는 복잡한 if-else 중첩을 줄여 가독성을 높여주지만, Epscript 내부적으로는 조건 분기 트리거가 생성됩니다. foreach(EUDLoopCUnit)과 같은 무거운 루프 내에서 불필요한 연산을 break로 끊어주는 것은 맵 성능(FPS) 최적화에 큰 도움이 됩니다.
return의 반환값
return 뒤에 값이나 변수를 적으면 함수를 호출한 곳으로 결과값을 보낼 수 있습니다. (예: return 1;) 이는 이후에 배울 04. 함수 챕터에서 더 자세히 다룹니다.
return은 반드시 함수(function) 내부에서만 사용할 수 있습니다. 함수 밖(메인 로직 등)에서 사용하면 컴파일 에러가 발생합니다.