Conditional operator | SWITCH Empfehlung

  • Mittwoch, 15. Juni 2016 13:35
Artikel bewerten
(0 Stimmen)

In diesem Beitrag möchte ich euch eine Alternative zum klassischen SWITCH CASE  sowie dem bekannten IF.....ELSEIF...ELSE...ENDIF... Konstrukt vorstellen.

 

Mit Release 7.40 ABAP unterstützt SAP KonditionaloperatorenKonditionaloperator werden in Konstruktor Ausdrücke verwendet, um ein Ergebnis zu erzeugen, die an Operandenpositionen verwendet werden kann.

Syntax

 ... switch type( ... ) ...

a) switch ist ein Conditional Operator.
b) type ist entweder der explizite Name eines Datentyps oder das Zeichen #. Mit # kann der Datentyp aus dem Operandenposition hergeleitet werden, wenn die Operanden -Typ statisch bekannt ist. Innerhalb der Klammern können bestimmte Parameter angegeben werden.

Ein Beispiel

 DATA(out) = cl_demo_output=>new( ).
DO.
  TRY.
      out->write(
*        SWITCH #( sy-index     " type for the return value will be STRING
        SWITCH string( sy-index
                       WHEN 1 THEN 'one'
                       WHEN 2 THEN 'two'
                       WHEN 3 THEN 'three'
                       ELSE THROW cx_overflow( ) ) ).
    CATCH cx_overflow.
      out->display( ).
      EXIT.
  ENDTRY.
ENDDO. 

Hinweis

  • Der Typ des Rückgabewerteswird automatisch bestimmt, wenn Ihr für type die # verwendet. Wenn der Compiler nicht in der Lage ist, den Typ zu bestimmen, müsst Ihr den expliziten Typ angeben, z.B. STRING.
    ==> SWITCH #( ... ) ... = n.i.O.
    ==> SWITCH STRING( ... ) ... = i.O.
  • Es gibt wohl auch die Möglichkeit der LET expression. Hierzu kann ich derzeit leider noch nichts sagen, da ich es noch nicht ausprobiert habe.

Beispiel Implementierung

Einige von euch werden mit Sicherheit auch schon meinen Blog über meine Facade Class für den BCS sich angeschaut haben. Hier verwende ich ebenfalls den SWITCH Operator. Zur Erklärung: Ich prüfe, welchen Empfänger Typ der aktuelle Datensatz besitzt und unterscheide anhand dessen Typs, welchen Kommunikationstypen ich verwende.

 me->my_alt_message->add_recipient(
                  EXPORTING
                    iv_address      = CONV #( <fs_mailrec>-receiver )   " Kommunikationsadresse (für INT, FAX, SMS...)
                    iv_commtype     = SWITCH #( <fs_mailrec>-rec_type "! 'INT'    " Kommunikationsart
                                                WHEN 'U' THEN 'INT'
                                                WHEN 'B' THEN 'USR'
                                                WHEN 'F' THEN 'FAX'
                                                )

Fazit:

Eine super Möglichkeit, unnötige Zeilen an Code zu sparen. Auch im Bereich der Lesbarkeit, denke ich, dass mit dieser neuen Möglichkeit sich das coding exterm verbessert hat. Was denkt Ihr? Über Kommentare würde ich mich freuen.

In diesem Sinne

Blogging is a conversation, not a code.

Letzte Änderung am Freitag, 17 Juni 2016 11:55
Kommentare einblenden

Copyright © 2017 ABAP-Workbench.de