Вы находитесь на странице: 1из 5

MODULARIZACIÓN EN ABAP

• Podemos modularizar ABAP, esto es dividir el programa en varias


partes, mediante el uso de prodecimientos o subrutinas (también
llamados métodos o funciones en otros lenguajes). Esto hace que
el código sea más fácil de entender, de mantener, y de encapsular
los datos.

• Esto último se consigue porque los datos que se manejan en un


procedimiento tan sólo están activos dentro del procedimiento y
desaparecen cuando este se ha terminado de ejecutar.

• Para crear una subrutina o procedimiento usamos la instrucción


FORM .....ENDFORM, por ejemplo para crear un procedimiento
llamado uno que escriba en pantalla la palabra "uno"

FORM uno.
WRITE / 'uno'.
ENDFORM.

• Para llamar al procedimiento anterior usamos la instrucción


PERFORM

PERFORM uno.

• Cada vez que escribamos la anterior instrucción se ejecutará el


código dentro del procedimiento uno.

• Podemos llamar a un procedimiento dentro de otro procedimiento,


por ejemplo

FORM dos.

1
WRITE / 'dos'.
PERFORM uno.
ENDFORM.

• Podemos pasar parámetros a una subrutina mediante la instrucción


USING VALUE o mediante la instrucción CHANGING.

• Cuando pasamos un parámetro con CHANGING en realidad se crea


un puntero al dato que le queremos pasar a la subrutina. Esto es lo
que se llama pasar un parámetro por referencia. Si el código de
la subrutina altera el contenido del parámetro esto afecta al
programa en su conjunto.

DATA x TYPE i VALUE 1.


PERFORM suma CHANGING x.
FORM suma CHANGING y TYPE i.
y = y + 1.
ENDFORM.

• En este caso el valor de la variable x se incrementa en uno cada


vez que llamamos o ejecutamos este procedimiento, ya que lo que
en realidad pasamos es una referencia o puntero que contiene la
dirección de x.

• Cuando usamos la instrucción USING VALUE en realidad estamos


haciendo una copia del parámetro y esto es lo que pasamos a la
subrutina. Esto es lo que se llama pasar un parámetro por valor,
por ejemplo

DATA x TYPE i VALUE 1.


PERFORM suma USING VALUE x.
FORM suma USING VALUE y LIKE x.
y = y + 1.

2
WRITE / y.
ENDFORM.

• En este caso al ejecutar la subrutina aparece en pantalla un 2, ya


que este es el valor de y. Sin embargo el valor de x permanece
inalterado, ya que tan sólo hemos pasado una copia.

• La variable y tan sólo existe durante el tiempo en que se está


ejecutando la subrutina suma, y desaparece con la instrucción
ENDFORM.

• Si usamos la intrucción USING es como si estuviéramos usando la


instrucción CHANGING (es decir estamos pasando un parámetro
por referencia) , pero es costumbre usar esta instrucción tan sólo
en el caso en que al ejecutar el procedimiento no se altere el valor
del parámetro, por ejemplo

DATA x TYPE i VALUE 1.


PERFORM mostrar USING x.
FORM mostar USING y LIKE x.
WRITE / y.
ENDFORM.

• En este caso hemos pasado una referencia (es decir la dirección de


la variable x) al procedimiento mostrar. Por lo tanto, cuando se
muestra en pantalla el valor de y, en realidad lo que se muestra es
el valor realmente almacenado en x, no una copia.

• Si usamos la instrucción CHANGING VALUE es como si usáramos la


instrucción USING VALUE, es decir, estamos pasando un parámetro
por valor (una copia). La diferencia es que al terminarse de
ejecutar el procedimiento, este devuelve una copia del valor que
tenga el parámetro local, por ejemplo,

3
DATA x TYPE i VALUE 1.
x = PERFORM sumar CHANGING VALUE x.
WRITE x.
FORM sumar CHANGING VALUE y LIKE x.
y = y + 1.
ENDFORM.

• En este programa el procedimiento sumar añade 1 al parámetro


que se pasemos y devuelve el parámetro modificado. Como
asignamos a x el parámetro que devuelve el procedimiento sumar,
lo que se muestra por pantalla es 2.

• Podemos pasar dos (o más) parámetros. En este caso el orden en


que se pasan los parámetros es importante, ya que los parámetros
se asignan por el orden en que se escriben en la interfaz (es decir
en la instrucción PERFORM). Veamos un ejemplo.

DATA x TYPE i VALUE 4.


DATA y TYPE i VALUE 2.
PERFORM dividir USING VALUE x y.
FORM dividir USING VALUE a LIKE x
b LIKE y.
DATA result TYPE f.
result = a / b.
WRITE result.
ENDFORM.

• En este caso el resultado que aparecerá por pantalla será un 2, ya


que primero pasamos el valor de x (una copia) y luego el valor de
y (otra copia).

• También podemos pasar un parámetro por valor y otro por


referencia, por ejemplo

4
DATA x TYPE i VALUE 4.
DATA y TYPE i VALUE 2.
DATA z TYPE i VALUE 10.
PERFORM sumar USING VALUE x y
CHANGING z.
WRITE z.
FORM sumar USING VALUE a LIKE x
b LIKE y.
CHANGING c LIKE z.
DATA c TYPE i.
c = a + b.
ENDFORM.

• En este caso se mostrará por pantalla el valor de 6, puesto que


este es el valor que tendrá z una vez que se ha ejecutado la
función sumar, teniendo en cuenta que le hemos pasado del valor
de x e y por valor (una copia) y le hemos pasado una referencia
(una dirección de memoria) de la variable z.

Вам также может понравиться