Implementing Loops

Objective

After completing this lesson, you will be able to implémenter des boucles

Implémenter des boucles

Les mots-clés DO, ENDDO, LOOP et ENDLOOP peuvent être utilisés pour définir des boucles.

Les boucles dans ABAP sont définies dans un bloc de code qui est exécuté plusieurs fois.

La forme la plus simple des boucles est constituée d'un bloc de code entouré d'instructions DO – ENDDO. Sans mesures supplémentaires, ces instructions pourraient établir une boucle sans fin qui doit être évitée par l'une des possibilités suivantes :

Nombre indiqué de boucles
En étendant l'instruction DO avec une expression entière suivie du mot-clé TIMES, vous pouvez indiquer explicitement la fréquence de traitement du bloc de code. L'expression entière peut être aussi simple qu'un littéral de nombre, mais aussi des calculs arithmétiques peuvent également être utilisés. Si la valeur de l'expression est égale à 0, le bloc de code entre DO et ENDDO n'est pas du tout exécuté et le programme continue immédiatement avec le code après l'ENDDO.
Interruption basée sur une condition logique
Vous pouvez interrompre une boucle à tout moment à l'aide de l'instruction EXIT. Le programme poursuit ensuite avec le code après ENDDO. Notez qu'en dehors de la boucle, EXIT a un effet différent. Il y interrompt le traitement du bloc de traitement actuel, par exemple la méthode actuelle.

En règle générale, EXIT est entouré de IF et ENDIF pour terminer la boucle en fonction d'une condition d'interruption. Sachez que de telles boucles peuvent se transformer en boucles infinies si la condition d'abandon n'est jamais vraie.

Bien entendu, il est possible de combiner les deux techniques, c'est-à-dire de spécifier explicitement le nombre de boucles puis de quitter la boucle avec EXIT. Par conséquent, le nombre de boucles devient un nombre maximal qui pourrait ne pas être atteint au moment de l'exécution.

Dans le bloc de code entre DO et ENDDO, vous pouvez implémenter des accès en lecture à l'objet de données intégré ABAP SY-INDEX. Cette variable entière sert de compteur de boucles, c'est-à-dire que la durée d'exécution ABAP augmente la variable de un au début de chaque nouvelle boucle.

La variable intégrée ABAP SY-TABIX peut remplir un objectif similaire pour les boucles. Notez cependant que SY-TABIX n'est pas vraiment un compteur, mais qu'il identifie la position de la ligne de table qui est traitée dans la boucle actuelle.

Implémenter une boucle DO – ENDDO

Scénario de gestion

À l'aide de l'objet DO. ENDDO mots-clés, les utilisateurs peuvent vouloir créer une boucle avec un nombre spécifié de boucles.

Étapes

  1. Créez une classe ABAP ZCL_S4D100_XX_DO_ENDDO avec l'interface IF_OO_ADT_CLASSRUN.

    1. Créez une classe ABAP nommée ZCL_S4D100_XX_ENDDO et ajoutez l'interface IF_OO_ADT_CLASSRUN.

    2. Affectez-le à votre package et liez-le à votre ordre de transport.

  2. Activez l'application.

    1. Appuyez sur Activer (Ctrl+F3).

  3. Dans la MÉTHODE IF_OO_ADT_CLASSRUN~MAIN, définissez un LOOP qui itère 3 fois et édite un message,

    1. Implémentez le code suivant dans 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. Activez et testez la classe.

    1. Appuyez sur Activer (Ctrl+F3).

    2. Appuyez sur F9 pour exécuter la classe.

    S'entraîner

Implémenter une boucle DO – ENDDO avec une condition d'interruption

Scénario de gestion

À l'aide de l'objet DO. ENDDO mots-clés, les utilisateurs peuvent vouloir créer une boucle avec une condition d'interruption à l'aide du mot-clé EXIT.

Remarque

Dans cet exercice, XX fait référence à votre numéro.

Étapes

  1. Copiez votre classe ZCL_S4D100_XX_DO_ENDDO dans ZCL_S4D100_XX_EXIT.

    1. Cliquez avec le bouton droit de la souris sur CLASSE ZCL_S4D100_XX_DO_ENDDO dans l'explorateur de projets et sélectionnez Dupliquer.

    2. Saisissez votre package, le nom et le nouveau nom de classe ZCL_S4D100_XX_EXIT et cliquez sur Suivant.

    3. Ajoutez-le à votre ordre de transport et cliquez sur Terminer.

  2. Activez l'application.

    1. Appuyez sur Activer (Ctrl+F3).

  3. Modifiez le code dans if_oo_adt_classrun~main pour définir un nouvel entier lv_number0 sur une valeur de c_number0 * c_number0. Créez une boucle DO et soustrayez 1 de lv_number0 lors de chaque itération de la boucle. Quittez la boucle lorsque lv_number0 est égal à c_number0.

    1. Implémentez la méthode IF_OO_ADT_CLASSRUN~MAIN. avec le code suivant :

      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. Activez et testez le programme.

    1. Appuyez sur Activer (Ctrl+F3).

    2. Appuyez sur F9 pour exécuter la classe.

    S'entraîner