12.6 프로그램 문법
다음은 스크립트 프로그램 내에서 사용할 수 있는 구문 및 키워드입니다.
종류 | 설명 |
IF-ELSE 구문 | 가장 기본적인 논리판단 구문입니다. |
WHILE/DO-WHILE 구문 | Loop 처리를 위한 기본적인 구문입니다. |
FOR 구문 | 다소 복잡한 구문이나 익숙해질 경우 간결한 형태의 Loop 처리 구문입니다. |
SWITCH-CASE 구문 | 여러 경우에 따라 처리 방법이 다른 경우 사용하는 구문입니다. |
GOTO 구문 | 프로그램의 진행 흐름을 강제로 지정할 수 있는 키워드입니다. |
CONTINUE 키워드 | Loop 구문 내에서 유용하게 쓰이는 키워드입니다. |
RETURN 키워드 | 모든 프로그램은 하나의 결과값을 출력합니다. |
RUNSCRIPT 키워드 | 다른 프로그램을 함수 방식으로 호출하는 경우, 호출 프로그램은 피호출 프로그램이 종료될때까지 대기상태가 됩니다. |
(1) IF-ELSE
IF-ELSE 구문은 가장 기본적인 논리판단 구문으로, IF-ELSE IF-ELSE IF… 와 같은 중첩 구문의 구성이 가능합니다. 중첩 횟수에는 제한이 없습니다. 또한 ELSE 구문의 생략이 가능합니다.
If (A == 1) { // A의 값이 1인 경우 처리되는 프로그램 } Else { // A의 값이 1이 아닌 경우 처리되는 프로그램 } |
(2) WHILE/DO-WHILE 구문
Loop 처리를 위한 기본적인 구문입니다. WHILE 키워드에 연속하여 기록되는 구문의 연산결과가 True인 동안에 하위에 기록된 구문을 반복하여 실행합니다.
A = 0; While (A<10) { //While 논리연산의 결과가 True 인 동안 반복처리되는 작업을 //이곳에 서술합니다. //본 예제는 10회 반복 처리의 예입니다. A = A +1; } |
While 구문의 하위 구문들은 논리판단 결과에 따라 전혀 실행되지 않을 수도 있습니다. 이 때, DO-WHILE 구문을 이용하여 Loop처리 구문이 최소 1회 수행된 후에 논리연산을 실행하도록 합니다.
Do { //While 논리연산의 결과가True인 때에 반복 처리될 작업을 서술합니다. //최소 1회 실행이 보장됩니다. } While (A<10); // 반드시 ‘ ; ’ 기호로 구문 종결 표시를 해야 합니다. |
(3) FOR 구문
이 구문의 특징은 Loop 개시 전 초기화 구문과 Loop 처리 여부를 판단하는 구문 및 매 Loop 수행 후 반드시 처리해야 하는 구문을 하나의 구문으로 통합한 형태입니다.
다음은 Loop 작업을 10회 반복하여 수행하는 경우를 For 구문을 이용하여 작성한 예입니다. (2) While 구문과 동일한 내용입니다.
For (A=0; A<10; A=A+1) { //Loop 처리 내용을 이곳에 서술합니다. } |
FOR 구문에 따르는 괄호에는 초기화 구문, 판단 구문, 후처리 구문이 모두 서술됩니다.
FOR (초기화구문; 판단구문; 후처리구문)
(4) SWITCH-CASE 구문
여러 경우에 따라 처리 방법이 다른 경우 사용합니다. 각 경우는 CASE 구문으로 구별하며, 개수에는 제한이 없습니다.
Case 구문에 따르는 값은 반드시 상수여야 하며, 콜론 “ : ” 으로 구문의 끝을 알려야 합니다. 즉, “Case TAG_B” 같이 변수나 태그 또는 수식을 지정할 수 없습니다. Switch 구문에는 1개의 Default 구문을 사용할 수 있습니다.
Default 구문은 상수를 필요로 하지 않으며 이 곳에 서술되는 내용은 Case 구문 중 어떤 곳에도 해당하지 않는 경우 실행됩니다. 필요하지 않은 경우 생략할 수 있습니다.
Case와 Default에 서술되는 작업이 처리되는 중 Break 키워드를 만나면 Switch 구문을 종료합니다. 만약 Break 키워드를 만나지 않은 상태에서 다른 Case나 Default 구문에 이르면 해당 위치에 작성된 내용이 처리됩니다. 실수의 우려가 있으나 의도적으로 사용하는 경우 간결한 프로그램을 작성할 수 있습니다.
Switch (A) { Case 1: // A의 값이 1인 경우 처리해야 하는 작업을 서술합니다. Break; Case 5: Case 7: // A의 값이 5 또는 7인 경우 처리해야 하는 작업을 서술합니다. Break; Default: // 나머지 모든 경우 처리해야 하는 작업을 서술합니다. 생략 가능합니다. Break; } |
(5) GOTO 구문
프로그램의 진행 흐름을 강제적으로 지정할 수 있는 키워드입니다. 이 구문은 인덱스 (“@”로 시작하는 고유한 이름)를 사용해 새로운 위치를 지정하여 사용됩니다.
인덱스 명칭은 변수, 태그, 프로그램 이름 등과 중복되지 않아야 합니다.
VAR A;
A = 0; @ComeHere //인덱스를 지정합니다. If (A < 10) { A = A + 1 Goto ComeHere; // 지정된 이름의 인덱스로 이동합니다. } |
(6) CONTINUE 키워드
Continue키워드는 Loop 구문 내부에서 유용하게 사용될 수 있습니다. 프로그램 진행 중 Continue 키워드를 만나면 현재 Loop의 선두 부분으로 프로그램 흐름이 이동합니다. 이 키워드는 WHILE, DO-WHILE, FOR 구문의 Loop 내부에서 유효합니다. 특히, Loop 내부에서 처리해야 하는 조건 판단(IF-ELSE)이 많은 경우 유용합니다. 다음은 동일한 작업을 처리하는 프로그램입니다.
While (A<10) { A = A +1; If (A < 5) { // A가 5보다 작은 경우 처리하는 작업 } Else { // A가 5보다 크거나 같은 경우 처리하는 작업 } } |
While (A<10) { A = A +1; If (A < 5) { // A가 5보다 작은 경우 처리하는 작업 Continue; } // A가 5보다 크거나 같은 경우 처리하는 작업 } |
(7) Return 키워드
모든 프로그램은 하나의 결과값을 출력합니다. 이 결과값은 다른 프로그램에 의하여 함수 형태로 호출되었을 때 전달됩니다. Return 키워드는 전달할 값을 결정하고, 프로그램의 진행을 종료하는 기능을 수행합니다.
다음 예제는 3개의 파라미터를 입력으로 받아 그 합을 호출자에게 전달하는 예제입니다.
다음 스크립트 프로그램의 이름을 MyPgm 이라고 가정합니다.
PARAM p1, p2, p3; Return p1+p2+p3; |
위의 프로그램을 다른 프로그램에서 호출되는 예제는 다음과 같으며, 예제 내 변수의 값에는 6이 저장됩니다.
RtnValue = MyPgm(1, 2, 3); |
(8) RUNSCRIPT 키워드
다른 프로그램을 함수 방식으로 호출하는 경우, 호출 프로그램은 피호출 프로그램이 종료될때까지 대기상태가 됩니다. 즉, 프로그램의 진행이 멈추고 피호출 프로그램이 종료되어 결과값을 전달하게 될 때까지 대기상태가 됩니다.
그러나 RunScript 키워드는 호출 프로그램의 종료를 대기하지 않습니다. 피호출 프로그램을 가동시킨 즉시 나머지 프로그램 작업을 진행합니다. 호출, 피호출 프로그램 둘 다 실행 상태가 되며 이는 Xpanel 스크립트 시스템의 멀티 태스킹 기능에 대응합니다.
If (A == 0) RunScript NewThread(); // 다른 프로그램 (NewThread)를 기동시킵니다. A = A + 1; // 이후 대기없이 나머지 작업을 진행합니다. |