2014-06-20 18 views
8

Czy w składni ABAP dostępny jest operator trójskładnikowy lub warunkowy? Nie znalazłem, więc zakładam, że odpowiedź brzmi "nie", ale czy istnieje alternatywa, której mogę użyć, aby wyjaśnić wspólne "nieme" oświadczenia, które rutynowo używam?Ternary operator (alternatywy)

Weźmy na przykład metodę, która rejestruje komunikat z opcjonalnymi parametrami komunikatu. Aby zdecydować między używaniem importowanego parametru lub wartość domyślną muszę sprawdzić wartość tak:

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. 

Operator trójargumentowy zmniejszyłoby każde z tych stwierdzeń pięć linii do jednej linii, jak widać na poniższym bloku kodu. Mogłoby to nawet uczynić użycie zmiennej tymczasowej zbędnym, gdy operator jest używany w linii.

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 . 

Czy istnieje sposób na przybliżenie tego stylu programowania w ABAP lub czy utknąłem z bałaganu?

Odpowiedz

19

Wersja 7.40 przynosi całą masę ulepszeń ABAP, które są interesujące. Deklaracja trójargumentowy styl (przynajmniej coś, co przypomina to) jest jednym z nich

Składnia:

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

Przykład deklaracji danych zmiennej o nazwie „bool” i przyporządkowanie wartości warunkowego w jednej linii. Stara skool ABAP to potrwa jak 10 linii.

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

Więcej informacji: http://scn.sap.com/community/abap/blog/2013/07/22/abap-news-for-release-740

+0

Po przeniesieniu do wersji 7.4 mogę potwierdzić, że działa to doskonale, mimo że podświetlenie składni zaznacza części instrukcji w nieprawidłowej czerwieni. Na marginesie, nie ogranicza się to do deklarowania nowych zmiennych, każde przypisanie wartości może korzystać z instrukcji 'COND'. – Lilienthal

2

Nie, w ABAP nie ma operatora podobnego do konstruktu a ? b : c znanego z innych języków. W twoim konkretnym przykładzie możesz jednak zadeklarować wartości domyślne dla parametrów twojej metody iv_class itd. W podpisie metody.

1

Podczas deklarowania zmiennych można ustawić wartość domyślną lub wyraźnie tak samo jak poniżej.

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.