A declaração WHILE executa continuamente um bloco de instruções enquanto uma determinada condição é verdadeira.
Sintaxe:
WHILE condição.
[bloco de instruções.]
ENDWHILE.
Operadores Aritméticos
- (+) – adição.
- (-) – subtração.
- (*) – multiplicação.
- (/) – divisão.
- DIV – divisão inteira.
- MOD – Resto da divisão inteira.
- ** – Potenciação.
Ao usar expressões matemáticas, os operadores +, -, *, **, e /, bem como abertura e fechamento de parênteses, são interpretados como palavras ABAP e devem ser precedidos e seguidos por espaços em branco.
Em operações de divisão, o divisor não pode ser zero se o dividendo não é zero. Com a divisão inteira, você usa os operadores DIV ou MOD em vez de /. DIV calcula o quociente inteiro, MOD calcula o resto da divisão.
Exemplo:
Neste exemplo criamos dois loopings para calcular os números primos em uma faixa de 1 à 1000. Vale deixar como nota que a linguagem ABAP possui uma sintaxe estilo velha guarda, as linguagens mais modernas reformularam a sintaxe do comando While para que não gere erros de logica.
Podemos ver isto no exemplo abaixo, em ABAP inicializamos o valor do looping e alimentamos o contador fora do comando while, o que não acontece em linguagens como Java, C# e o moderno C++. Em nosso exemplo a inicialização do looping é essencial para o resultado do calculo e pode ser facilmente esquecida ou não prevista, criando um resultado indesejado, já o contador se não for incrementado irá entrar em um laço infinito impedindo a continuidade do programa, para entender melhor você pode ver o mesmo exemplo de laço com a sintaxe moderna clicando aqui:
ABAP
*&---------------------------------------------------------------------* *& Report ZPRIMOS *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Primos *&---------------------------------------------------------------------* REPORT ZPRIMOS. DATA : numeros TYPE i, primos TYPE i. numeros = 1. *// Inicie a variável primos aqui e obterá um erro logico. WHILE numeros LE 1000. primos = 2. " // Old Style, tente inicializar a variável fora do looping. WHILE primos LE ( numeros - 1 ). IF ( ( numeros MOD primos ) EQ 0 ). EXIT. ENDIF. primos = primos + 1. " // Old Style, sem está instrução obterá um laço infinito. ENDWHILE. IF primos EQ numeros. WRITE : numeros, ','. ENDIF. numeros = numeros + 1. " //Old Style, sem está instrução obterá um laço infinito. ENDWHILE.