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

 

  • Sem rótulos