
Os loops no ABAP são definidos em um bloco de código que é executado várias vezes.
A forma mais simples de loops consiste em um bloco de código rodeado por instruções DO – ENDDO. Sem outras medidas, essas declarações poderiam estabelecer um loop infinito que deve ser evitado por uma das seguintes possibilidades:
- Número indicado de loops
- Ao ampliar a instrução DO com uma expressão de número inteiro seguida da palavra-chave TIMES, você pode indicar explicitamente a frequência com que o bloco de código deve ser processado. A expressão de inteiro pode ser tão simples quanto um literal numérico, mas também cálculos aritméticos também podem ser usados. Se o valor da expressão for igual a 0, o bloco de código entre DO e ENDDO não é executado de todo, e o programa continua imediatamente com o código após o ENDDO.
- Cancelar com base em uma condição lógica
- Você pode cancelar um loop a qualquer momento utilizando a instrução EXIT. Em seguida, o programa continua com o código após ENDDO. Considere que fora do loop EXIT tem um efeito diferente. Aí, ele cancela o processamento do bloco de processamento atual, por exemplo, o método atual.
Normalmente, EXIT é circundado por IF e ENDIF para encerrar o loop dependendo de uma condição de cancelamento. Considere que esses loops podem se transformar em loops infinitos se a condição de cancelamento nunca for verdadeira.
Obviamente, é possível combinar as duas técnicas, ou seja, especificar explicitamente o número de loops e, em seguida, deixar o loop com EXIT. Por isso, o número de loops se torna um número máximo que pode não ser atingido no momento da execução.
No bloco de código entre DO e ENDDO, você pode implementar acessos de leitura ao objeto de dados integrado ABAP SY-INDEX. Esta variável de número inteiro serve como um contador de loop, ou seja, o tempo de execução ABAP aumenta a variável em um no início de cada loop novo.
A variável integrada ABAP SY-TABIX pode cumprir uma finalidade semelhante para loops. Mas esteja ciente de que SY-TABIX não é realmente um contador, mas identifica a posição da linha da tabela que é processada no loop atual.