Sintaxe
LOOP
Propósito
O comando LOOP causa o retorno do controle do fluxo de execução para o início dos comandos de programação estruturada WHILE ... ENDDO ou FOR ... NEXT. O LOOP evita a execução das instruções restantes dentro de um bloco desses comandos.
Argumentos
Nenhum.
Utilização
O comando LOOP deve ser utilizado sempre dentro de um bloco de instruções dos comandos WHILE ... ENDDO ou FOR ... NEXT. Ao ser encontrado, ele causa o retorno imediato do fluxo de execução para o início desses comandos, sem a necessidade de se atingir o ENDDO ou o NEXT. As instruções que estiverem entre o LOOP e o ENDDO ou o NEXT não serão executados. No caso do WHILE, a condição de controle será novamente avaliada. No caso do FOR ... NEXT, o contador será incrementado e comparado com o seu limite.
Exemplos
Na função abaixo, a execução é retornada para o início do WHILE quando o segundo elemento do array aAlmox estiver preenchido com “N”.
// Função de cálculo
FUNCTION CalcGrao(nSacas, aAlmox)
LOCAL nPos := 0
LOCAL nReserva := 0
LOCAL nSoma := 0
WHILE nPos < LEN(aAlmox) .AND. nReserva < nSacas
nPos++
IF aAlmox[nPos, 2] == "N"
LOOP
ENDIF
nSoma := nReserva + aAlmox[nPos]
IF nSoma <= nSacas
nReserva := nSoma
ELSE
nReserva := nSacas
ENDIF
ENDDO
RETURN nReserva
Da mesma forma que na função anterior, baseada no WHILE, a execução da função abaixo é retornada para o início quando o segundo elemento do array aAlmox estiver preenchido com “N” ou quando a quantidade reservada for igual à quantidade de sacas solicitadas.
// Função de cálculo
FUNCTION CalcGrao(nSacas, aAlmox)
LOCAL nPos := 0
LOCAL nReserva := 0
LOCAL nSoma := 0
FOR nPos := 1 TO LEN(aAlmox)
IF nReserva == nSacas .OR. aAlmox[nPos, 2] == "N"
LOOP
ENDIF
nSoma := nReserva + aAlmox[nPos, 1]
IF nSoma <= nSacas
nReserva := nSoma
ELSE
nReserva := nSacas
ENDIF
NEXT nPos
RETURN nReserva