2014-06-20 16 views
8

Esiste un operatore ternario o condizionale disponibile nella sintassi ABAP? Non ne ho trovato uno quindi presumo che la risposta sia negativa, ma c'è un'alternativa che posso usare per chiarire le comuni dichiarazioni "stupide" IF che uso abitualmente?Operatore ternario (alternative)

Ad esempio, considerare un metodo che registra un messaggio con parametri di messaggio facoltativi. Per decidere se utilizzare il parametro importato o il default devo controllare il valore in questo modo:

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. 

Un operatore ternario ridurrebbe ognuna di queste affermazioni di cinque righe a una singola linea come si è visto nel blocco di codice di seguito. Potrebbe persino rendere inutile l'uso di una variabile temporanea quando l'operatore viene utilizzato in linea.

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 . 

C'è un modo per approssimare questo tipo di stile di programmazione in ABAP o sto bloccato con il disordine?

risposta

19

Release 7.40 porta un sacco di miglioramenti ABAP che sto trovando interessanti. La dichiarazione di stile ternario (almeno qualcosa che assomiglia ad esso) è uno di loro

Sintassi: dichiarazione di dati

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

Esempio di una variabile denominata 'bool' e un'assegnazione di valore condizionale in una sola riga. Old skool ABAP questo richiederà 10 righe.

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

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

+0

Passato a 7.4 Posso confermare che questo funziona perfettamente, anche se l'evidenziazione della sintassi segnerà parti dell'istruzione in rosso non valido. Come nota, questo non è limitato alla dichiarazione di nuove variabili, qualsiasi assegnazione di valore può usare l'istruzione 'COND'. – Lilienthal

2

No, in ABAP non esiste un operatore simile al costrutto a ? b : c noto da altre lingue. Nell'esempio concreto, tuttavia, è possibile dichiarare valori predefiniti per i parametri del metodo iv_class nella firma del metodo.

1

Mentre dichiarare le variabili che è possibile impostare il valore di default o esplicitamente fare lo stesso come di seguito.

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.