SWITCH and COND offer a special form of conditional program flow. Unlike IF and CASE, they respresent different values based on an expression rather than executing statements. That's why they count as functional.
Whenever multiple conditions have to be considered, COND can do the job. The syntax is fairly simple:
COND <type>(
WHEN <condition> THEN <value>
...
[ ELSE <default> | throw <exception> ]
).
" Set screen element active depending on radio button
screen-active = COND i(
WHEN p_radio = abap_true THEN 1
ELSE 0 " optional, because type 'i' defaults to zero
).
" Check how two operands are related to each other
" COND determines its type from rw_compare
rw_compare = COND #(
WHEN op1 < op2 THEN 'LT'
WHEN op1 = op2 THEN 'EQ'
WHEN op1 > op2 THEN 'GT'
).
SWITCH is a neat tool for mapping values, as it checks for equality only, thus being shorter than COND in some cases. If an unexpected input was given, it is also possible to throw an exception. The syntax is a little bit different:
SWITCH <type>(
<variable>
WHEN <value> THEN <new_value>
...
[ ELSE <default> | throw <exception> ]
).
DATA(lw_language) = SWITCH string(
sy-langu
WHEN 'E' THEN 'English'
WHEN 'D' THEN 'German'
" ...
ELSE THROW cx_sy_conversion_unknown_langu( )
).