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

ABAP - Vergleiche

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)
Werbung

ABAP - Performance für den SELECT

Kategorie - ABAP

In diesem Artikel schauen wir uns noch ein paar Spezialfälle mit dem SELECT an und beleuchten die Performance dieser Konstrukte. Wir zeigen dir die aktuellen Alternativen dafür und geben kleinere Tipps beim Lesen.

02.04.2021

ABAP - Objekte prüfen (Instanzen)

Kategorie - ABAP

In diesem Artikel zeigen wir dir, wie du Instanzen analysieren und auf diese korrekt reagieren kannst, wenn du diese zum Beispiel bei einer Verarbeitung übergibst und individuell reagieren möchtest.

19.03.2021

ABAP - Schleifen

Kategorie - ABAP

Mit dem modernen ABAP wurden auch neue Schleifen und Möglichkeiten zur Einschränkung von Tabelleninhalten geschaffen. Diese neuen Befehle schauen wir uns in diesem Artikel näher an.

19.02.2021

ABAP - String Funktionen (Teil 3)

Kategorie - ABAP

In diesem Artikel geht es um weitere neue String Funktionen und einen Ersatz für CONDENSE. Hierbei möchten wir dir noch zeigen, wieso du die neuen Funktionen verwenden solltest.

22.01.2021

ABAP - CL_ABAP_CONTEXT_INFO

Kategorie - ABAP

Gesammelte Informationen zum User und dem System erhielt man bisher nur aus der SYST Struktur. Mittlerweile gibt es auch eine Klasse, die viele dieser Informationen liefert.

15.01.2021

Wir verwenden Cookies für unsere Dienste und Funktionen. Mehr Informationen