This is a test message to test the length of the message box.
Login
ABAP Vergleiche
Erstellt von Software-Heroes

ABAP - Vergleiche

1290

Heute betrachten wir uns das Thema Vergleiche und Vergleichsoperatoren im Hinblick auf die neuen Befehle und die aktuelle Verwendung. Was hat sich bisher alles geändert und was sollte man noch tun.

Werbung


Immer wieder sehen wir in Code Reviews noch die Verwendung der alten Operatoren oder das für True/False noch Literale verwendet werden. Im heutigen Artikel wollen wir einmal auf die aktuellen Standards und neuen Befehle in diesem Umfeld eingehen.

 

Vergleichsoperatoren

Viele Entwickler verwenden noch heute die klassischen ABAP Vergleichsoperatoren wie EQ, NE, GT, GE, LT oder LE. Mittlerweile ist man aber dazu übergegangen auf die "normalen" Vergleichsoperatoren ( =, <>, >, >=, <, <= ) zurückzugreifen, da diese bei Vergleichen und Datenbankzugriffen einfach und klar sind. Dies erhöht auch etwas die Lesbarkeit bei der Verwendung, um sich von Schlüsselwörtern zu unterscheiden und einen klaren Vergleich herauszustellen. Ebenfalls erleichtert diese Methode den Einstieg für jüngere Entwickler, die bisher eher Erfahrungen im JAVA oder Python Bereich gesammelt haben.

Es gibt aber auch Operatoren die durchaus verwendet werden können, wenn du zum Beispiel prüfen willst ob ein String in einer Zeichenkette enthalten ist (CS) oder ein Pattern in einer Zeichenkette vorkommt (CP). Hier ist es noch üblich auf die kurze Schreibweise zu wechseln.

 

Boolean

Offiziell besitzt ABAP keinen echten Datentypen Boolean, so wie ihn fast alle anderen Sprachen haben. Hier wird seit Jahren auf dem Datentypen CHAR mit einem Zeichen Länge gearbeitet. True entspricht einem großen "X" und False ist initial oder auch über die Konstante "space" abgebildet. Leider sehen wir immer wieder, dass bei Methodenschnittstellen auf CHAR1 verwiesen wird, oder bei den Vergleichen gegen Literale verglichen wird.

Dabei gibt es schon seit sehr langer Zeit die Typgruppe ABAP, dort findet man den entsprechenden Datentypen. Mittlerweile muss man die Typgruppen auch nicht mehr aktiv im Coding einbinden, sondern diese sind immer verfügbar. Als Vergleich gibt es daher ABAP_TRUE und ABAP_FALSE, diese können für die Vergleiche herangezogen werden. Der Datentyp ABAP_BOOL kann für die Definition von Variablen und Schnittstellenparametern genutzt werden. Möchtest du ein Datenelement, welches auch auf Dynpros verwendet wird, empfehlen wir ABAP_BOOLEAN.

DATA:
  ld_compare TYPE abap_boolean.

IF ld_compare = abap_true.
  " Do Something
ENDIF.

 

XSDBOOL

Bei dem Befehl handelt es sich um einen neuen Ausdruck, mit dem man einen Vergleich durchführen kann und damit ein Wahr oder Falsch erhält. In vielen Situationen kann das ein wenig an Code einsparen oder sogar große Abfragen in kleinere Teile aufbrechen. In dem folgenden Beispiel einmal eine Methode, die einen boolschen Wert zurückgibt, wenn Einträge in einer Tabelle gefunden wurden.

SELECT FROM zbs_dy_t001
  FIELDS bukrs, butxt, land1
  INTO TABLE @DATA(lt_company_codes).

" Old
IF sy-subrc = 0.
  rd_found = abap_true.
ELSE.
  rd_found = abap_false.
ENDIF.

" New
rd_found = xsdbool( sy-subrc = 0 ).

 

COND

Die Befehl ist eher ein Ersatz für das Konstrukt von If und Else If und kann für einfache Aufgaben, bei der zum Beispiel nur ein Wert gesetzt wird, verwendet werden. Damit kannst du das ganze Konstrukt etwas kompakter darstellen und hast auch hier die Möglichkeiten eine Exception zu erzeugen, wenn zum Beispiel gar kein Fall eintritt und der Wert fehlerhaft ist.

DATA:
  ld_value  TYPE i VALUE 42,
  ld_result TYPE abap_boolean.

" Old
IF ld_value > 40.
  ld_result = abap_true.
ELSEIF ld_value > 0.
  ld_result = abap_false.
ELSE.
  RAISE EXCEPTION NEW cx_sy_arg_out_of_domain( ).
ENDIF.

" New
ld_result = COND #( WHEN ld_value > 40 THEN abap_true
                    WHEN ld_value > 0 THEN abap_false
                    ELSE THROW cx_sy_arg_out_of_domain( ) ).

 

SWITCH

Der Switch Befehl erfüllt die gleiche Funktion wie der CASE und sollte bereits aus Sprachen wie PHP bekannt sein. Dazu auch ein ähnliches Beispiel wie bei COND, da im Grunde ein ähnliches Ergebnis heraus kommt. Wie dir bestimmt schon aufgefallen ist, kann der Befehl ebenfalls zur Inline-Deklaration verwendet werden.

DATA:
  ld_value  TYPE i VALUE 42,
  ld_result TYPE abap_boolean.

" Old
CASE ld_value.
  WHEN 42.
    ld_result = abap_true.
  WHEN 39.
    ld_result = abap_false.
  WHEN OTHERS.
    RAISE EXCEPTION NEW cx_sy_arg_out_of_domain( ).
ENDCASE.

" New
ld_result = SWITCH #( ld_value
                      WHEN 42 THEN abap_true
                      WHEN 39 THEN abap_false
                      ELSE THROW cx_sy_arg_out_of_domain( ) ).

 

Fazit

Auch innerhalb der Vergleich von ABAP hat sich einiges getan und die Sprache wurde etwas moderner gestaltet. Bei all den kürzeren Schreibweisen, solltest du aber auch auf eine ordentliche Formatierung achten, sonst kann neuer Quellcode auch schnell mal schwer lesbar werden, eigentlich das was man mit Clean Code vermeiden möchte.

 

Quelle:
ABAP Dokumentation - XSDBOOL
ABAP Dokumentation - COND
ABAP Dokumentation - SWITCH


Enthaltene Themen:
Modernes ABAPVergleicheSWITCHCONDXSDBOOL
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ABAP - XCO Excel

Kategorie - ABAP

Was kann eigentlich die XCO Bibliothek für Excel in ABAP? Hier schauen wir uns den aktuellen Stand der API an.

29.11.2024

ABAP - XCO Strings

Kategorie - ABAP

In diesem Artikel schauen wir uns die XCO Klasse zur Erzeugung und Verarbeitung von Strings für ABAP Cloud an und vergleichen sie mit den klassischen Statements.

22.11.2024

ABAP - XCO Bibliotheken

Kategorie - ABAP

Was kannst du mit der Bibliothek in ABAP und ABAP Cloud machen und wie nutzt du die Objekte am besten? Hier erfährst du mehr.

12.11.2024

ABAP - Type Casting

Kategorie - ABAP

Wie kommst du eigentlich an den ursprünglichen Typ einer Klasse bzw. Instanz, wenn diese in einer generischen Tabelle übergeben wird? In diesem Artikel prüfen wir die Möglichkeiten.

16.04.2024

ABAP - RETURN value

Kategorie - ABAP

Nach all den Jahren ist nun endlich der "echte" Return in ABAP angekommen, in diesem Artikel zeigen wir dir, wie der funktioniert und was er kann.

13.02.2024