While 문
특정 조건이 충족될 때까지 지시 세트를 반복하려면 while 문을 사용합니다.
while 문을 사용하여 지정된 조건이 true일 때까지
작업 세트를 반복할 수 있습니다. Impact 정책 언어의 while 문이
C, C++, Java와 같은 프로그래밍 언어에서 사용되는 것과 동일합니다.
while 문의 구문은 while 키워드 및
그 뒤에 오는 소괄호로 묶은 부울 표현식입니다. 이 표현식 뒤에
중괄호({ })로 묶은 명령문 블록이 옵니다.
while (condition) { statements }
여기서, condition은 부울 표현식이고 statements는
하나 이상의 명령문 그룹입니다. 예제:
I = 10;
while(I > 0) {
Log("The value of I is: " + I);
I = I - 1;
}
정책에서 while 키워드가 감지된 경우
부울 표현식을 평가하여 true인지 여부를 확인합니다. 표현식이 true인 경우 뒤에 오는 블록의 명령이
실행됩니다. 명령문이 실행된 후 Netcool/Impact는
표현식을 다시 테스트하고 조건이 false가 될 때까지 반복해서 명령문 블록을
계속 실행합니다.
while 문을 사용하는 가장 일반적인 방법은
정책의 다른 요인에 따라서 특정 횟수만큼 실행되는 루프를
구성하는 것입니다. 이 방법으로 while 문을
사용하려면 정수 변수를 카운터로 사용합니다. while
루프가 시작하기 전에 카운터의 값을 설정하고 루프 안에서
카운터 값을 줄입니다. While 문은 루프가 실행될 때
카운터의 값을 테스트하고 카운터의 값이 영(0)일 때
종료합니다.
다음 예제는 while 문의 간단한 사용을 보여줍니다.
Counter = 10;
while (Counter > 0) {
Log("The value of Counter is " + Counter);
Counter = Counter - 1;
}여기에서 Counter라는 변수에 값
10을 지정합니다. while 문에서
정책은 Counter의 값을 테스트하여 0보다 큰지
확인합니다. Counter가 0보다 큰
경우 이후의 블록에 있는 명령문이 실행됩니다.
블록의 마지막 명령문이
Counter의 값을 1씩 줄입니다. 이 예제의
While 루프는 종료하기 전에 10번 실행합니다.
이 예제를 실행하면, 정책 로그에 다음 메시지를 인쇄합니다.
The value of Counter is 10
The value of Counter is 9
The value of Counter is 8
The value of Counter is 7
The value of Counter is 6
The value of Counter is 5
The value of Counter is 4
The value of Counter is 3
The value of Counter is 2
The value of Counter is 1다음 예제는 While 문을 사용하여 배열을 통해 반복하는 방법을 보여줍니다. 보통 데이터 소스에서 검색되는 데이터 항목을 검색할 때 이 기법을 사용합니다.
MyArray = {"One", "Two", "Three", "Four"};
Counter = Length(MyArray);
while (Counter > 0) {
Index = Counter - 1;
Log(MyArray[Index]);
Counter = Counter - 1;
}여기에서 Counter 값을 배열의 요소 수로
설정합니다. While 문은 각 배열 요소에 대해 명령문 블록을
한 번 순환합니다. Index 변수를 Counter 값 빼기 1로
설정합니다. IPL의 배열이 0을 기반으로
하기 때문입니다. 이는 첫 번째 요소의 색인 값이
1이 아니라 0임을 의미합니다.
이 예제를 실행하면, 정책 로그에 다음 메시지를 인쇄합니다.
Four
Three
Two
One이러한 예제에서 이 기법을 사용하여 배열의 요소를 반복할 때 요소에 역순으로 액세스합니다. 이를 피하기 위해 루프에서 카운터 변수를 줄이는 대신 늘릴 수 있습니다. 따라서 사용자는 카운터가 While 문 내에서 배열의 요소 수보다 작은지 여부를 테스트해야 합니다.
다음 예제는 카운터 변수의 값을 늘리면서 배열을 순환하는 방법을 보여줍니다.
MyArray = {"One", "Two", "Three", "Four"};
ArrayLength = Length(MyArray);
Counter = 0;
while (Counter < ArrayLength) {
Log(MyArray[Counter]);
Counter = Counter + 1;
}이 정책을 실행하면, 정책 로그에 다음 메시지를 인쇄합니다.
One
Two
Three
Four
WHILE문의
부울 조건이 충족되지 않을 위험이 있습니다. 이로 인하여
무한 루핑 정책이 발생하고 메모리 부족 문제가
발생할 수 있습니다. 이를 예방하기 위해 maxloopsize 특성을
NCI_server.props에 추가할 수 있습니다. 예제:impact.policy.maxloopsize=50
IPL 정책에 있는
WHILE 루프가 maxloopsize
특성에서 지정된 수보다 더 많이 루핑되는 경우, 정책은
WHILE 루프를 중단하고 impactserver.log
파일에 다음 오류가 생성됩니다.
ERROR
[IPLImpactActionInterpreterVisitor] The policy: myWHILELoop has looped
more than 50 times!