SWITCH Operador: Múltiples opciones en una sola línea (sin CASE)

En ABAP clásico, cuando necesitas asignar un valor según el contenido de una variable (como un código de país, un tipo de IVA o un estado), usas un CASE:

CASE lv_pais.
  WHEN 'ES'.
    lv_moneda = 'Euro'.
  WHEN 'US'.
    lv_moneda = 'Dólar'.
  WHEN 'UK'.
    lv_moneda = 'Libra'.
  WHEN OTHERS.
    lv_moneda = 'Desconocido'.
ENDCASE.

Son 8 líneas para algo muy sencillo. Con el operador SWITCH puedes escribir lo mismo en una sola línea.

¿Qué es SWITCH?

WITCH es un operador que te permite asignar un valor según el valor de una variable, evaluando múltiples opciones posibles. Es como un CASE de una línea.

Sin SWITCH (clásico)Con SWITCH (moderno)
CASE ... WHEN ... WHEN ... WHEN ... ENDCASE. (múltiples líneas)SWITCH #( var WHEN 'A' THEN 'X' WHEN 'B' THEN 'Y' ELSE 'Z' )

La sintaxis de SWITCH es:

DATA(resultado) = SWITCH tipo(
variable_a_comparar
WHEN valor1 THEN resultado1
WHEN valor2 THEN resultado2
WHEN valor3 THEN resultado3
ELSE resultado_por_defecto
).
Pieza¿Qué significa?
DATA(resultado)Declara una variable para guardar el resultado
SWITCH tipoOperador SWITCH que devolverá un valor del tipo indicado
variableLa variable cuyo valor vamos a comparar (ej. lv_pais)
WHEN valor THEN resultadoSi variable vale valor, devuelve resultado
ELSE resultadoSi variable no coincide con ningún WHEN, devuelve este valor

Diferencia entre SWITCH y COND

Esta es la duda más común. Aquí tienes la diferencia:

Operador¿Qué compara?¿Cuándo usarlo?Ejemplo
CONDCompara condiciones booleanas (verdaderas/falsas)lv_edad >= 18, lv_nota > 5COND #( WHEN lv_edad >= 18 THEN 'Adulto' ELSE 'Menor' )
SWITCHCompara el valor de una variable con múltiples opcioneslv_pais, lv_tipo_iva, lv_estadoSWITCH #( lv_pais WHEN 'ES' THEN 'Euro' WHEN 'US' THEN 'Dólar' ELSE '?' )

📌 Regla: Si tu condición usa >, <, >=, <=, <> → usa COND. Si tu condición usa = (igualdad) con una variable y varias opciones → usa SWITCH

Ejemplos prácticos

Sintaxis vieja:

CASE lv_pais.
  WHEN 'ES'.
    lv_moneda = 'Euro'.
  WHEN 'US'.
    lv_moneda = 'Dólar'.
  WHEN 'UK'.
    lv_moneda = 'Libra'.
  WHEN OTHERS.
    lv_moneda = 'Desconocido'.
ENDCASE.

Sintaxis nueva:

DATA(lv_moneda) = SWITCH string(
    lv_pais
    WHEN 'ES' THEN 'Euro'
    WHEN 'US' THEN 'Dólar'
    WHEN 'UK' THEN 'Libra'
    ELSE 'Desconocido'
).

Otro ejemplo

DATA(lv_nombre_mes) = SWITCH string(
    lv_mes
    WHEN 1 THEN 'Enero'
    WHEN 2 THEN 'Febrero'
    WHEN 3 THEN 'Marzo'
    WHEN 4 THEN 'Abril'
    WHEN 5 THEN 'Mayo'
    WHEN 6 THEN 'Junio'
    WHEN 7 THEN 'Julio'
    WHEN 8 THEN 'Agosto'
    WHEN 9 THEN 'Septiembre'
    WHEN 10 THEN 'Octubre'
    WHEN 11 THEN 'Noviembre'
    WHEN 12 THEN 'Diciembre'
    ELSE 'Mes inválido'
).

El operador SWITCH es perfecto para asignar un valor según el valor de una variable, comparándolo con múltiples opciones posibles.

OperadorÚsalo para…
SWITCHComparar una variable con varios valores fijos (como un CASE de una línea)
CONDComparar condiciones booleanas (como un IF de una línea)
CASEMuchas opciones (>6) o cuando necesitas ejecutar acciones