Sintaxe
FOR <variável> := <expressão inicial> TO <expressão final> [ STEP <expressão incremental> ]
...
< instruções >
...
[ LOOP ]
...
[ EXIT ]
...
< instruções >
...
NEXT <variável>
Propósito
O comando FOR ... NEXT permite a repetição de um bloco de instruções por um determinado número de vezes, avaliado por um contador incrementado automaticamente através de uma expressão
numérica.
Argumentos
<variável >
Define o nome da variável de memória que será utilizada como contador para realizar o controle do número de repetições. Se a variável especificada não existir ou não for visível, será automaticamente criada uma variável privada.
<expressão inicial>
É uma expressão numérica que define o valor inicial a ser assumido pela variável de controle ou contador.
TO <expressão final>
É uma expressão numérica que define o valor final (máximo ou mínimo) que poderá ser assumido pela variável de controle ou contador.
STEP <expressão incremental>
Define o incremento da variável de controle. Cada vez que é completado um ciclo de repetição, a variável de controle ou contador é incrementada através do resultado da expressão incremento, que deve ser numérica.
O incremento poderá ser positivo ou negativo. Se for positivo, a expressão final deve ser maior que a expressão inicial, pois o contador será crescente. Se for negativo, a expressão final deve ser menor que a expressão inicial, pois o contador será decrescente. Caso este argumento não seja especificado, será assumido automaticamente um incremento igual à 1 (um) a cada ciclo completado.
EXIT
Finaliza a repetição, desviando incondicionalmente o fluxo de execução do programa para a primeira linha de instrução após o NEXT.
LOOP
Reinicia um ciclo de repetição a partir de um ponto intermediário do bloco de instruções contido num FOR ... NEXT, evitando que uma parte das instruções deste bloco seja executada. Portanto, reinicia o bloco de instruções mesmo não tendo atingido o NEXT.
Utilização
Cada vez que uma repetição é iniciada, o AdvPL reavalia todas as expressões que definem o controle do FOR ... NEXT, o que o caracteriza como dinâmico. Isto significa que é possível alterar os seus limites e parâmetros modificando os valores envolvidos nas expressões, mesmo durante a execução do FOR ... NEXT.
Dicas
Este comando é especialmente útil para a manipulação de arrays. O contador poderá ser utilizado como índice para processar todos os seus elementos.
A estrutura FOR ... NEXT pode ser intercalada dentro de qualquer outra estrutura de programação, inclusive dentro de outros FOR ... NEXT. Não há limite de níveis. A única exigência é que cada estrutura de controle seja corretamente intercalada. Isto é, o início e o fim de cada estrutura de controle devem estar contidos dentro do início e do fim de outras de menor nível.
Exemplos
O exemplo abaixo apresenta os valores do contador nCont, que será incrementado de -3 em -3:
FOR nCont := 15 TO 0 STEP -3
MSGALERT( nCont )
NEXT nCont
O resultado será 15, 12, 9, 6, 3 e 0.
O exemplo abaixo permite a visualização dos valores contidos nos elementos de um array:
nNumElem := LEN(aVetor)
FOR nElem := 1 To nNumElem
MSGALERT( aVetor[nElem] )
NEXT nElem