Implementing Loops

Objective

After completing this lesson, you will be able to implementar loops

Implementar loops

As palavras-chave DO, ENDDO, LOOP e ENDLOOP podem ser utilizadas para definir loops

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.

Implementar um loop DO – ENDDO

Exemplo de negócio

Utilizando a OD . . Palavras-chave ENDDO, os usuários podem querer criar um loop com um número especificado de loops.

Etapas

  1. Crie uma nova classe ABAP ZCL_S4D100_XX_DO_ENDDO com a interface IF_OO_ADT_CLASSRUN.

    1. Crie uma nova classe ABAP com o nome ZCL_S4D100_XX_ENDDO e adicione a interface IF_OO_ADT_CLASSRUN.

    2. Atribua-o ao seu pacote e vincule-o à sua solicitação de transporte.

  2. Ative a aplicação.

    1. Pressione Ativar (Ctrl+F3).

  3. No METHOD IF_OO_ADT_CLASSRUN~MAIN, defina um LOOP que itere 3 vezes e edite uma mensagem,

    1. Implemente o seguinte código em METHOD IF_OO_ADT_CLASSRUN~MAIN.

      Code Snippet
      123456789
      CONSTANTS: c_number0 TYPE i VALUE 3. out->write( '---------------------------------' ). out->write( 'Example 1: DO...ENDDO with TIMES' ). out->write( '---------------------------------' ). DO c_number0 TIMES. out->write( 'Hello World' ). ENDDO.
  4. Ative e teste a classe.

    1. Pressione Ativar (Ctrl+F3).

    2. Pressione F9 para executar a classe.

    Praticar

Implementar um loop DO – ENDDO com uma condição de cancelamento

Exemplo de negócio

Utilizando a OD . . Palavras-chave ENDDO, os usuários podem querer criar um loop com uma condição de cancelamento usando a palavra-chave EXIT.

Nota

Neste exercício, XX se refere ao seu número.

Etapas

  1. Copie sua classe ZCL_S4D100_XX_DO_ENDDO para ZCL_S4D100_XX_EXIT.

    1. Clique com o botão direito em CLASS ZCL_S4D100_XX_DO_ENDDO no Explorador de projetos e selecione Duplicar.

    2. Insira seu pacote e nome e o nome da nova classe ZCL_S4D100_XX_EXIT e pressione Seguinte.

    3. Adicione-o à sua ordem de transporte e pressione Concluir.

  2. Ative a aplicação.

    1. Pressione Ativar (Ctrl+F3).

  3. Modifique o código em if_oo_adt_classrun~main para definir um novo número inteiro lv_number0 para um valor de c_number0 * c_number0. Crie um loop DO e subtraia 1 de lv_number0 durante cada iteração do loop. Saia do loop quando lv_number0 for igual a c_number0.

    1. Implemente o METHOD IF_OO_ADT_CLASSRUN~MAIN. com o seguinte código:

      Code Snippet
      123456789101112131415
      CONSTANTS: c_number0 TYPE i VALUE 3. DATA: lv_number0 TYPE i. lv_number0 = c_number0 * c_number0. * Count backwards from lv_number0 to c_number0 DO. out->write( |{ sy-index }: Value of lv_number0: { lv_number0 }| ). lv_number0 = lv_number0 - 1. * Abort condition IF lv_number0 <= c_number0. "If 3 = 3 EXIT. ENDIF. ENDDO.
  4. Ative e teste o programa.

    1. Pressione Ativar (Ctrl+F3).

    2. Pressione F9 para executar a classe.

    Praticar