2014-06-20 19 views
8

Gibt es in der ABAP-Syntax einen ternären oder bedingten Operator? Ich habe keinen gefunden, nehme also an, dass die Antwort nein ist, aber gibt es dann eine Alternative, die ich verwenden kann, um die üblichen "dummen" Aussagen zu klären, die ich routinemäßig verwende?Ternärer Operator (Alternativen)

Betrachten Sie zum Beispiel eine Methode, die eine Nachricht mit optionalen Nachrichtenparametern protokolliert. Um zu entscheiden, zwischen den importierten Parameter verwenden oder dem Standard Ich habe den Wert zu überprüfen, wie so:

IF iv_class IS INITIAL. 
    lv_message_class = 'DEFAULT'. 
ELSE. 
    lv_message_class = iv_class. 
ENDIF. 
IF iv_number IS INITIAL. 
    lv_message_number = '000'. 
ELSE. 
    lv_message_number = iv_number. 
ENDIF. 
IF iv_type IS INITIAL. 
    lv_message_type = 'E'. 
ELSE. 
    lv_message_type = iv_type. 
ENDIF. 

Ternäre Operator jeden dieser fünf-line-Anweisungen zu einer einzigen Zeile reduzieren würde, wie im folgenden Code-Block zu sehen. Es könnte sogar die Verwendung einer temporären Variablen unnötig machen, wenn der Bediener in-line verwendet wird.

lv_message_class = iv_class IS INITIAL ? 'DEFAULT' : iv_class. 
lv_message_number = iv_number IS INITIAL ? '000'  : iv_number . 
lv_message_type = iv_type IS INITIAL ? 'E'  : iv_type . 

Gibt es eine Möglichkeit, diese Art von Programmierstil in ABAP anzunähern oder bin ich mit dem Durcheinander fest?

Antwort

19

Release 7.40 bringt eine ganze Reihe von ABAP-Verbesserungen, die ich finde haufenweise interessant. Die ternäre Stildeklaration (zumindest etwas, das es ähnelt) ist einer von ihnen

Syntax:

COND dtype|#(WHEN log_exp1 THEN result1 
      [ WHEN log_exp2 THEN result2 ] 
      ... 
      [ ELSE resultn ]) ... 

Beispieldaten Deklaration einer Variablen ‚Bool‘ und eine bedingte Wertzuweisung in einer Zeile genannt. Old skool ABAP das wird wie 10 Zeilen dauern.

DATA(bool) = COND #(WHEN i * i > number THEN abap_true ELSE abap_false). 

Weitere Informationen: http://scn.sap.com/community/abap/blog/2013/07/22/abap-news-for-release-740

+0

Nachdem ich auf 7.4 verschoben habe, kann ich bestätigen, dass dies perfekt funktioniert, obwohl die Syntax-Hervorhebung Teile der Anweisung in ungültigem Rot markiert. Beachten Sie, dass dies nicht auf die Deklaration neuer Variablen beschränkt ist. Jede Wertzuweisung kann die Anweisung 'COND' verwenden. – Lilienthal

2

Nein, in ABAP gibt es keinen Operator, der dem aus anderen Sprachen bekannten Konstrukt a ? b : c ähnlich ist. In Ihrem konkreten Beispiel könnten Sie jedoch Standardwerte für Ihre Methodenparameter iv_class usw. in der Signatur der Methode deklarieren.

1

Während die Variablen deklarieren Sie den Standardwert festlegen können oder tun explizit die gleiche wie unten.

lv_message_class = 'DEFAULT'. 
lv_message_number = '000'. 
lv_message_type = 'E'. 

IF iv_class IS NOT INITIAL. 
    lv_message_class = iv_class. 
ENDIF. 
IF iv_number IS NOT INITIAL. 
    lv_message_number = iv_number. 
ENDIF. 
IF iv_type IS NOT INITIAL. 
    lv_message_type = iv_type. 
ENDIF. 
Verwandte Themen