콘텐츠로 이동

분기문 (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 함수 자체를 종료 반복문 내부에서 쓰면 반복문과 함수 모두 종료

반복문과 성능

breakcontinue는 복잡한 if-else 중첩을 줄여 가독성을 높여주지만, Epscript 내부적으로는 조건 분기 트리거가 생성됩니다. foreach(EUDLoopCUnit)과 같은 무거운 루프 내에서 불필요한 연산을 break로 끊어주는 것은 맵 성능(FPS) 최적화에 큰 도움이 됩니다.

return의 반환값

return 뒤에 값이나 변수를 적으면 함수를 호출한 곳으로 결과값을 보낼 수 있습니다. (예: return 1;) 이는 이후에 배울 04. 함수 챕터에서 더 자세히 다룹니다.

return반드시 함수(function) 내부에서만 사용할 수 있습니다. 함수 밖(메인 로직 등)에서 사용하면 컴파일 에러가 발생합니다.