Instruções WHILE
Use a instrução WHILE para fazer loop em um conjunto
de instruções até que uma determinada condição seja atendida.
É possível usar a instrução while para repetir um conjunto
de operações até uma condição especificada ser true. A instrução while na Linguagem da
Política do Impact é a mesma que a usada nas linguagens de programação como C, C++ e
Java.
A sintaxe para a instrução WHILE é a palavra-chave
WHILE seguida por uma expressão Booleana colocada entre parênteses. Esta expressão é
seguida por um bloco de instruções colocadas entre chaves.
while (condição) { instruções }
em que condition é uma expressão booleana e statements é um grupo de uma ou mais instruções. Por
exemplo:
I = 10;
while(I > 0) {
Log("The value of I is: " + I);
I = I - 1;
}
Quando a palavra-chave while é encontrada em uma política, a
expressão booleana é avaliada para ver se ela é verdadeira. Se a
expressão for verdadeira, as instruções no bloco a seguir serão executadas.
Depois das instruções serem executadas, o
Netcool/Impact novamente testa a
expressão e continua a execução do bloco de instrução repetidamente até que a condição
seja falsa.
A maneira mais comum de usar a instrução WHILE é construir um loop que seja
executado um determinado número de vezes, dependendo de outros fatores em uma política. Para usar a instrução
WHILE desta maneira, use uma variável de número inteiro como um contador. Configure o valor
do contador antes do início do loop while e diminua-o dentro do loop. A instrução WHILE
testa o valor do contador sempre que o loop é executado e é encerrada quando o valor do contador é zero.
O exemplo a seguir mostra um uso simples da instrução WHILE:
Counter = 10;
while (Counter > 0) {
Log("The value of Counter is " + Counter);
Counter = Counter - 1;
}Aqui, você designa o valor de 10 a uma variável chamada
Counter. Na instrução WHILE, a política testa o valor de
Counter para verificar se ele é maior que zero. Se
Counter for maior que zero, as instruções no bloco que segue serão
executadas. A instrução
final no bloco diminui o valor de Counter em um. O loop While neste exemplo é executado 10
vezes antes de ser encerrado.
Ao executar este exemplo, ele imprime a seguinte mensagem no log de política:
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 1O exemplo a seguir mostra como usar a instrução WHILE para iterar por meio de uma matriz. Geralmente, você usa esta técnica ao manipular itens de dados recuperados de uma origem de dados.
MyArray = {"One", "Two", "Three", "Four"};
Counter = Length(MyArray);
while (Counter > 0) {
Index = Counter - 1;
Log(MyArray[Index]);
Counter = Counter - 1;
}Aqui, você configura o valor de Counter como o número
de elementos na matriz. A instrução WHILE faz loop por meio do bloco de instrução
uma vez para cada elemento de matriz. Configure a variável Index como o
valor de Counter menos um. Isso se dá porque um IPL é baseado em zero. Isto significa que o valor de índice do primeiro elemento
é 0, em vez de 1.
Ao executar este exemplo, ele imprime a seguinte mensagem no log de política:
Four
Three
Two
OneNesses exemplos, quando você usa essa técnica para iterar por meio dos elementos em uma matriz, poderá acessar os elementos na ordem reversa. Para evitar isso, é possível incrementar a variável do contador em vez de diminuí-la no loop. Isto requer que você teste se o contador é menor que o número de elementos na matriz na instrução WHILE.
O exemplo a seguir mostra como fazer loop por meio de uma matriz ao incrementar o valor da variável do contador.
MyArray = {"One", "Two", "Three", "Four"};
ArrayLength = Length(MyArray);
Counter = 0;
while (Counter < ArrayLength) {
Log(MyArray[Counter]);
Counter = Counter + 1;
}Ao executar esta política, ela imprime a seguinte mensagem no log de política:
One
Two
Three
FourWHILE não seja atendida, podendo fazer com que uma política execute loop infinitamente,
resultando em problema de falta de memória. Para evitar isso, uma propriedade maxloopsize pode ser incluída em NCI_server.props. Por
exemplo: impact.policy.maxloopsize=50
Se um loop WHILE em uma política de IPL estiver em loop mais vezes que o especificado pela propriedade maxloopsize, a política sairá do loop WHILE e o erro a seguir será gerado no arquivo impactserver.log:
ERROR
[IPLImpactActionInterpreterVisitor] The policy: myWHILELoop has looped
more than 50 times!