Cómo escribir código más limpio y moderno desde ABAP 7.40
Si llevas tiempo trabajando con ABAP clásico, seguramente estás acostumbrada a declarar variables al inicio del programa con DATA… incluso antes de saber si realmente las vas a usar.
Con ABAP 7.40 esto cambió por completo. La declaración en línea (inline declaration) permite definir variables justo en el momento en el que se utilizan, haciendo el código más limpio, legible y moderno.
¿Qué es la declaración en línea?
La declaración inline te permite declarar una variable en el mismo lugar donde la usas, sin necesidad de declararla antes con DATA, es decir, te permite declarar variables en el mismo momentos en el que se usa por primera vez.
En lugar de esto:
DATA: lv_text TYPE string.
lv_text = 'Hola mundo'.
Puedes hacer esto:
DATA(lv_text) = 'Hola mundo'.
El sistema infiere automáticamente el tipo de la variable a partir del valor que le asignas.
| Ventaja | Explicación |
|---|---|
| Código más compacto | Menos líneas de declaración |
| Variables más cercanas a su uso | Mejora la legibilidad |
| Menos riesgo de errores de tipo | El tipo se deduce automáticamente |
| No necesitas recordar tipos complejos | El sistema los infiere |
Usos más comunes
En loops
LOOP INTO work area (con work area)
Sintaxis vieja:
DATA wa_mara TYPE mara.
LOOP AT it_mara INTO wa_mara.
WRITE: wa_mara-matnr.
ENDLOOP.
Sintaxis nueva:
LOOP AT it_mara INTO DATA(wa_mara).
WRITE: wa_mara-matnr.
ENDLOOP.
LOOP ASSIGNING field symbol
Sintaxis vieja:
FIELD-SYMBOLS: <line> LIKE LINE OF itab.
LOOP AT itab ASSIGNING <line>.
<line>-campo = 'nuevo valor'.
ENDLOOP.
Sintaxis nueva:
LOOP AT itab ASSIGNING FIELD-SYMBOL(<wa_itab>).
<wa_itab>-campo = 'nuevo valor'.
ENDLOOP.
Consultas a base de datos (SELECT)
SELECT SINGLE con una sola fila
Sintaxis vieja:
DATA: ls_empleado TYPE zempleado.
SELECT SINGLE * FROM zempleado INTO ls_empleado WHERE id = '100'.
Sintaxis nueva:
SELECT SINGLE * FROM zempleado INTO @DATA(ls_empleado) WHERE id = '100'.
SELECT múltiples filas (tablas internas)
Sintaxis vieja:
DATA: lt_empleados TYPE TABLE OF zempleado.
SELECT * FROM zempleado INTO TABLE lt_empleados.
Sintaxis nueva:
SELECT * FROM zempleado INTO TABLE @DATA(lt_empleados).
SELECT SINGLE con campos específicos
Sintaxis vieja:
DATA: lv_nombre TYPE string,
lv_edad TYPE i.
SELECT nombre, edad FROM zempleado INTO (lv_nombre, lv_edad).
Sintaxis nueva:
SELECT nombre, edad FROM zempleado INTO (@DATA(lv_nombre), @DATA(lv_edad)).
Lectura de datos (READ TABLE)
READ TABLE INTO work area
Sintaxis vieja:
DATA: wa_itab LIKE LINE OF itab.
READ TABLE itab INTO wa_itab WITH KEY id = '100'.
Sintaxis nueva:
READ TABLE itab INTO DATA(wa_itab) WITH KEY id = '100'.
READ TABLE ASSIGNING field symbol
Sintaxis vieja:
FIELD-SYMBOLS: <ls_itab> LIKE LINE OF itab.
READ TABLE itab ASSIGNING <ls_itab> WITH KEY id = '100'.
Sintaxis nueva:
READ TABLE itab ASSIGNING FIELD-SYMBOL(<ls_itab>) WITH KEY id = '100'.
Llamadas a métodos (CALL METHOD)
Sintaxis vieja:
DATA: lv_employee_id TYPE i.
lv_result TYPE string.
lo_obj->get_data( EXPORTING employee_id = lv_employee_id
IMPORTING result = lv_result ).
Sintaxis nueva:
lo_obj->get_data( EXPORTING employee_id = lv_employee_id
IMPORTING result = DATA(lv_result) ).
Al instanciar un objeto
Sintaxis vieja:
DATA lo_ixml TYPE REF TO if_ixml.
lo_ixml = cl_ixml=>create( ).
Sintaxis nueva:
DATA(lo_ixml) = cl_ixml=>create( ).
Otros usos
Variables auxiliares (helper variables)
Sintaxis vieja:
DATA lv_count TYPE i.
FIND 'A' IN lv_text MATCH COUNT lv_count.
Sintaxis nueva:
FIND 'A' IN lv_text MATCH COUNT DATA(lv_count).
Transformaciones y resultados
Sintaxis vieja:
DATA xml TYPE xstring.
CALL TRANSFORMATION id RESULT XML xml.
Sintaxis nueva:
CALL TRANSFORMATION id RESULT XML DATA(xml).
Field-Symbols
Sintaxis viejaa:
FIELD-SYMBOLS: <fs> TYPE any.
ASSIGN lv_valor TO <fs>.
Sintaxis nueva:
ASSIGN lv_valor TO FIELD-SYMBOL(<fs>).
La declaración en línea no es solo una «sintaxis más bonita». Es un cambio de paradigma en la forma de escribir ABAP: más limpio, más seguro y más legible. Pasas de “declarar todo al inicio” a “declarar solo lo que necesitas, cuando lo necesitas”.


