Implementing Conditional Logic

Objective

After completing this lesson, you will be able to bedingte Logik in einem ABAP-Programm implementieren

Bedingte Verzweigungen implementieren

Bedingte Verzweigung: Implementierung

Mit den Schlüsselwörtern IF, ELSEIF, ELSE und ENDIF kann eine bedingte Verzweigung im ABAP-Quelltext implementiert werden.

Bei der bedingten Verzweigung handelt es sich um eine Kontrollstruktur, mit der Sie die Ausführung von Code von logischen Bedingungen abhängig machen können.

Die häufigste bedingte Verzweigung besteht aus einem Schlüsselwortpaar IF und ENDIF. Der ABAP-Quelltextblock zwischen IF und ENDIF wird nur ausgeführt, wenn die Bedingung hinter IF erfüllt ist.

Sie können weitere Quelltextblöcke hinzufügen, die IF erweitern. ENDIF -Struktur durch Verwendung des Schlüsselworts ELSE und eine beliebige Anzahl von Blöcken mit dem Schlüsselwort ELSEIF. Durch das Hinzufügen des Schlüsselworts ELSE wird sichergestellt, dass immer genau einer der ABAP-Quelltextblöcke ausgeführt wird. Wenn ELSE fehlt, darf keiner der ABAP-Quelltextblöcke ausgeführt werden.

Jeder IF . . ENDIF-Schlüsselwörter sind obligatorisch, und jedes IF muss ein ENDIF haben.

Der ABAP-Quelltextblock, der ausgeführt wird, lautet wie folgt:

  • Zuerst wird die IF-Bedingung ausgewertet. Falls erfüllt, wird der zugehörige ABAP-Quelltextblock ausgeführt, und das Programm wird nach dem ENDIF. fortgesetzt.
  • Nur wenn die IF-Bedingung nicht erfüllt ist, wird die Bedingung nach dem ersten ELSEIF ausgewertet. Wenn erfüllt, wird der zugehörige Quelltextblock ausgeführt, und das Programm wird nach ENDIF fortgesetzt.

  • Dies geschieht nacheinander für alle ELSEIF-Bedingungen. Wenn keine der Bedingungen erfüllt ist und die Struktur ELSE enthält, wird der ABAP-Quelltextblock hinter ELSE ausgeführt. Andernfalls wird keiner der ABAP-Quelltextblöcke ausgeführt.

Hinweis

Im Gegensatz zu vielen anderen Programmiersprachen benötigt ABAP nach jeder logischen Bedingung und auch nach dem Schlüsselwort ELSE ein Trennzeichen (.).

Logische Bedingungen

Liste von Schlüsselwörtern zum Erstellen logischer Bedingungen mit drei Beispielimplementierungen

Logische Bedingungen sind eine Kombination aus Vergleichen, logischen Operationen, Ausdrücken und Funktionen, die das Laufzeitsystem auswertet, um zu entscheiden, ob die Bedingung wahr oder falsch ist.

Der häufigste Anwendungsfall für logische Bedingungen ist nach den Schlüsselwörtern IF oder ELSEIF in einem IF . . . ENDIF-Struktur.

Das erste Beispiel (in der obigen Abbildung) ist ein einfacher Vergleich: Die Bedingung ist wahr, wenn die beiden Datenobjekte x und y den gleichen Wert haben.

Das zweite Beispiel (in der obigen Abbildung) ist etwas ausgefeilter: Entweder ist der Wert von x größer oder gleich y und kleiner als das Doppelte des Werts von y, oder er ist kleiner oder gleich y und größer als das Doppelte des Werts von y.

Im dritten Beispiel (in obiger Abbildung) wird die arithmetische Funktion abs( ) und der logische Ausdruck BETWEEN <expression 1> AND <expression 2>. verwendet. Die Bedingung ist wahr, wenn der absolute Wert von x zwischen dem absoluten Wert von y und dem absoluten Wert von zwei Mal y liegt.

Für einfache Wertevergleiche können Sie die Operatoren =, <>, >, <, >=, and <=verwenden. Sie können nicht nur die Werte von Datenobjekten, sondern auch viele andere Ausdrücke vergleichen, wie der arithmetische Ausdruck 2 * y im obigen Beispiel.

Notiz

ABAP verwendet für Bewertungen und Wertevergleiche das gleiche Symbol (=). Die Unterscheidung erfolgt anhand der Position.

Operatoren und Semantiken

OperatorBedeutung
AND

Wird verwendet, um mehrere logische Ausdrücke zu verknüpfen. Der daraus entstehende neue logische Ausdruck ist nur dann wahr, wenn auch alle verknüpften logischen Ausdrücke wahr sind.

OR

Wird verwendet, um mehrere logische Ausdrücke zu verknüpfen, um einen neuen logischen Ausdruck anzulegen, der wahr ist, wenn mindestens einer der logischen Ausdrücke wahr ist.

NOT

Die Negation eines logischen Ausdrucks mit NOT erzeugt einen neuen logischen Ausdruck, der falsch ist, wenn der logische Ausdruck wahr ist und umgekehrt.

Sie können die Operatoren AND und OR verwenden, um logische Ausdrücke zu kombinieren, und den Operator NOT, um einen Ausdruck zu negieren. Ohne Klammern bindet NOT stärker als AND und AND stärker als OR.

ABAP kennt einige spezielle logische Ausdrücke:

  • <data object> IS INITIAL ist wahr, wenn <data object>seinen typspezifischen Wert enthält
  • <data object> IS NOT INITIAL ist wahr, wenn <data object> einen Wert enthält, der vom typspezifischen Initialwert abweicht.
  • <data object> ZWISCHEN <expression 1> UND <expression 2>

Einige spezielle ABAP-Funktionen sind Prädikatfunktionen.  Dies bedeutet, dass sie selbst logische Bedingungen sind. Beispielsweise ist Contains( ) eine Funktion, die zeichenartige Werte vergleicht.

Eine IF-Anweisung implementieren

Unternehmensszenario

Verwendung der IF ... ENDIF -Schlüsselwörter Benutzer möchten möglicherweise die logischen Bedingungen in einem ABAP-Programm anlegen und auswerten und die Ergebnisse ausgeben. Legen Sie ein neues Anwendungsprogramm an, verwenden Sie die Schlüsselwörter IF, ELSE und ENDIF und geben Sie das Ergebnis aus.

Notiz

In dieser Übung bezieht sich XX auf Ihre Nummer.

Schritte

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

    1. Legen Sie eine neue ABAP-Klasse mit dem Namen ZCL_S4D100_XX_COND 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 Konstante C_NUMBER0 mit Initialwert 0. Verwenden Sie eine IF-Anweisung, um eine Meldung auszugeben, wenn der Wert der Konstante null ist oder nicht.

    1. Implementieren Sie den folgenden Quelltext unter METHOD IF_OO_ADT_CLASSRUN~MAIN.

      Code Snippet
      1234567891011
      CONSTANTS: c_number0 TYPE i VALUE 0. out->write( '-----------------------------' ). out->write( 'Example 1: IF...ELSE...ENDIF' ). out->write( '-----------------------------' ). IF c_number0 = 0. out->write( 'The value of c_number0 equels zero' ). ELSE. out->write( 'The value of c_number0 equels some numer other than zero' ). ENDIF.
  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

Fallaussagen

Mit den Schlüsselwörtern CASE, WHEN, WHEN OTHERS und ENDCASE kann auch eine bedingte Verzweigung implementiert werden.

Eine zweite Technik für bedingte Verzweigungen ist CASE . . . WHEN . . . ENDCASE Kontrollstruktur.

Bedingte Verzweigung mit CASE . . . ENDCASE ist ein Spezialfall der allgemeineren Verzweigung mit IF . . . ENDIF. Sie können CASE in Situationen verwenden, in denen die Verzweigung vom Wert eines einzelnen Datenobjekts abhängt, das Sie nacheinander mit einer Menge möglicher Werte vergleichen, wobei jedes Mal ein gleichwertiger Vergleich verwendet wird.

Im obigen Beispiel wird der Wert des Datenobjekts „Zahl" mit den Werten 1 und 2 verglichen. Wenn der Wert gleich 1 ist, wird <code_block_1> ausgeführt, und wenn der Wert gleich 2 ist, wird stattdessen <code_block_2> ausgeführt. Bei jedem anderen Wert wird der Quelltextblock nach WHEN OTHERS ausgeführt.

Eventuelle bedingte Verzweigung mit CASE ... ENDCASE könnte innerhalb eines IF ... ENDIF-Struktur. Dies wird im obigen Beispiel auf der rechten Seite veranschaulicht.

Zeichenketten verarbeiten

Unternehmensszenario

Sie haben den vollständigen Namen eines Kunden, müssen jedoch den Vornamen anzeigen. Legen Sie den ABAP-Code an, um den vollständigen Namen in Vorname und Nachname aufzuteilen, und geben Sie den Vornamen an die Konsole aus.

Notiz

In dieser Übung bezieht sich XX auf Ihre Nummer.

Schritte

  1. Legen Sie die Klasse ZCL_S4D100_XX_COND für ZCL_S4D100_XX_CASE an.

    1. Expandieren Sie CLASS ZLCOAL im Projekt-Explorer.

    2. Klicken Sie mit der rechten Maustaste auf das Paket ZS4D100_XX, und wählen Sie NewABAP Class.

    3. Geben Sie als NamenZCL_S4D100_XX_CHAR ein.

    4. Geben Sie als Beschreibung"Zeichenfolge" ein.

    5. Wählen Sie Hinzufügen, um das Interface IF_OO_ADT_CLASSRUN hinzuzufügen.

    6. Wählen Sie OK.

    7. Wählen Sie Next.

    8. Wählen Sie Ihren Transportauftrag aus, und wählen Sie Fertigstellen.

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

  2. Ändern Sie den Quelltext in if_oo_adt_classrun~main so, dass statt einer IF -Anweisung eine CASE -Anweisung verwendet wird, um zu prüfen, ob c_number0 initial ist oder nicht.

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

      Code Snippet
      1234567
      DATA: lv_full_name TYPE string VALUE 'Stan Wilson', lv_first_name TYPE string, lv_last_name TYPE string. SPLIT lv_full_name AT '' INTO lv_first_name lv_last_name. out->write( |user { lv_first_name }| ).
  3. Aktivieren und testen Sie das Programm.

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

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

    Übung