Implementing Loops

Objective

After completing this lesson, you will be able to schleifen implementieren

Schleifen implementieren

Mit den Schlüsselwörtern DO, ENDDO, LOOP und ENDLOOP können Schleifen definiert werden.

Schleifen in ABAP werden in einem mehrfach ausgeführten Quelltextblock definiert.

Die einfachste Form von Schleifen besteht aus einem Quelltextblock, der von den Anweisungen DO – ENDDO umgeben ist. Ohne weitere Maßnahmen könnten diese Anweisungen zu einer Endlosschleife führen, die durch eine der folgenden Möglichkeiten vermieden werden muss:

Angegebene Anzahl von Schleifen
Durch Erweiterung der DO -Anweisung mit einem Integer-Ausdruck gefolgt vom Schlüsselwort TIMES kann explizit angegeben werden, wie oft der Quelltextblock verarbeitet werden soll. Der ganzzahlige Ausdruck kann genauso einfach wie ein Zahlenliteral sein, es können aber auch arithmetische Berechnungen verwendet werden. Wenn der Wert des Ausdrucks gleich 0 ist, wird der Quelltextblock zwischen DO und ENDDO überhaupt nicht ausgeführt und das Programm fährt sofort mit dem Quelltext hinter ENDDO fort.
Abbruch aufgrund einer logischen Bedingung
Sie können eine Schleife jederzeit mit der Anweisung EXIT abbrechen. Das Programm wird dann mit dem Quelltext nach ENDDO fortgesetzt. Beachten Sie, dass außerhalb der Schleife EXIT eine andere Wirkung hat. Dort bricht es die Verarbeitung des aktuellen Verarbeitungsblocks ab, z.B. der aktuellen Methode.

In der Regel wird EXIT von IF und ENDIF umgeben, um die Schleife abhängig von einer Abbruchbedingung zu beenden. Beachten Sie, dass solche Schleifen in Endlosschleifen umgewandelt werden können, wenn die Abbruchbedingung nie wahr ist.

Natürlich ist es möglich, die beiden Techniken zu kombinieren, d.h. die Anzahl der Schleifen explizit anzugeben und die Schleife dann mit EXIT zu verlassen. Daher wird die Anzahl der Schleifen zu einer maximalen Anzahl, die zur Laufzeit möglicherweise nicht erreicht wird.

Im Quelltextblock zwischen DO und ENDDO können Lesezugriffe auf das eingebaute ABAP-Datenobjekt SY-INDEX implementiert werden. Diese Integer-Variable dient als Schleifenzähler, d.h. die ABAP-Laufzeit erhöht die Variable zu Beginn jeder neuen Schleife um eins.

Die eingebaute ABAP-Variable SY-TABIX kann einen ähnlichen Zweck für Schleifen erfüllen. Beachten Sie jedoch, dass SY-TABIX kein Zähler ist, sondern die Position der Tabellenzeile identifiziert, die in der aktuellen Schleife verarbeitet wird.

DO implementieren – ENDDO-Schleife

Unternehmensszenario

Verwendung des DO . . ENDDO-Schlüsselwörter möchten Benutzer möglicherweise eine Schleife mit einer bestimmten Anzahl von Schleifen erstellen.

Schritte

  1. Legen Sie die neue ABAP-Klasse ZCL_S4D100_XX_DO_ENDDO mit dem Interface IF_OO_ADT_CLASSRUN an.

    1. Legen Sie eine neue ABAP-Klasse mit dem Namen ZCL_S4D100_XX_ENDDO an, und fügen Sie das Interface IF_OO_ADT_CLASSRUN hinzu.

    2. Ordnen Sie es Ihrem Paket zu, und verknüpfen Sie es mit Ihrem Transportauftrag.

  2. Aktivieren Sie die Anwendung.

    1. Wählen Sie "Aktivieren" (Strg+F3).

  3. Definieren Sie in der METHOD IF_OO_ADT_CLASSRUN~MAIN eine LOOP , die dreimal iteriert und eine Meldung ausgibt.

    1. Implementieren Sie den folgenden Quelltext unter 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. Aktivieren und testen Sie die Klasse.

    1. Wählen Sie "Aktivieren" (Strg+F3).

    2. Drücken Sie F9, um die Klasse auszuführen.

    Übung

DO – ENDDO-Schleife mit Abbruchbedingung implementieren

Unternehmensszenario

Verwendung des DO . . ENDDO-Schlüsselwörter möchten Benutzer möglicherweise eine Schleife mit einer Abbruchbedingung mit dem Schlüsselwort EXIT anlegen.

Notiz

In dieser Übung bezieht sich XX auf Ihre Nummer.

Schritte

  1. Kopieren Sie Ihre Klasse ZCL_S4D100_XX_DO_ENDDO in ZCL_S4D100_XX_EXIT.

    1. Klicken Sie im Project Explorer mit der rechten Maustaste auf CLASS ZCL_S4D100_XX_DO_ENDDO, und wählen Sie Duplicate.

    2. Geben Sie Ihr Paket, Ihren Namen und den neuen Klassennamen ZCL_S4D100_XX_EXIT ein, und wählen Sie Weiter.

    3. Fügen Sie sie Ihrem Transportauftrag hinzu, und wählen Sie Fertigstellen.

  2. Aktivieren Sie die Anwendung.

    1. Wählen Sie "Aktivieren" (Strg+F3).

  3. Ändern Sie den Quelltext in if_oo_adt_classrun~main, um eine neue Ganzzahl lv_number0 auf den Wert c_number0 * c_number0zu setzen. Erstellen Sie eine DO -Schleife und subtrahieren Sie 1 von lv_number0 während jeder Iteration der Schleife. Beenden Sie die Schleife, wenn lv_number0 gleich c_number0 ist.

    1. Implementieren Sie die Methode IF_OO_ADT_CLASSRUN~MAIN mit dem folgenden Quelltext:

      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. Aktivieren und testen Sie das Programm.

    1. Wählen Sie "Aktivieren" (Strg+F3).

    2. Drücken Sie F9, um die Klasse auszuführen.

    Übung