Lección 1/9: QUE SON LAS SUBRUTINAS?
1. SUBRUTINAS.
Las Subrutinas son secciones de código que pueden ser utilizadas mas de una vez.
Utilizando las Subrutinas hace que el código de los programas sean mas fáciles de leer y de mantener.
MODULARIZAR
Es la acción de pasar el código de un programa a subrutinas, para mejorar la lectura y mantenimiento del mismo.
Lo ideal es que una subrutina no tenga mas de 50 lineas de código
Con la modularización se encuentra mas fácilmente los errores en los programas porque al debaguear un programa solo me preocupo que el resultado de una subrutina sea el esperado sin entrar en detalle como se llega a ese resultado.
una subrutina se declara con la palabra reservada PERFORM seguida del nombre de la misma.
Ejemplo:
*Selecciono datos de tabla de usuarios
PERFORM selecciono_datos.
Es recomendable que el nombre que asigne a una subrutina sea lo mas representativo posible del resultado que produce la subrutina.
2. TIPOS DE SUBRUTINAS
Existen 2 tipos:
INTERNAS Cuando la subrutina esta dentro del mismo programa que se llama.
EXTERNAS Cuando la subrutina esta en un programa distinto al que las llama. Como puede ser el caso de un include de subrutinas u otro programa.
3. SUBRUTINAS INTERNAS
Para crear una subrutina interna se utiliza la palabra clave PERFORM seguida del nombre de la subrutina, Se crea un bloque FORM-ENFORM donde colocamos nuestro código.
Se puede pasar datos entre los programas principales y una subrutina a traves de parámetros.
A los parámetros declarados en el programa principal (a la derecha de la palabra PERFORM) se los llama PARAMETROS ACTUALES.
A los parámetros definidos en la subrutina (a la derecha de la palabra FORM) se los llama PARÁMETROS FORMALES.
Los parámetros pueden ser de 3 tipos:
De Entrada: Se utilizan para pasar datos del programa principal a la subrutina.
De Salida: Se utilizan para pasar datos de la subrutina al programa principal.
De Entrada y Salida: Se utilizan para pasar datos de la subrutina al programa principal y también viceversa.
4. PASO DE PARÁMETROS A SUBRUTINAS
Para pasar los parámetros se utiliza 3 opciones: USING, CHANGING Y TABLES. Estas opciones se deben escribir en el orden que mostramos a continuación en el siguiente
Ejemplo.
PERFORM subrutina TABLES <tabla de salida>
USING <parametro de entrada>
CHANGING <parametro de salida>
En el bloque FORM-ENDFORM se debe especificar el tipo de los parámetros formales. De esta forma nos aseguramos que solo se pasen párametros del tipo que corresponde a la subrutina.
Ejemplo. Pasamos una tabla interna, una estructura y una variable de tipo carácter.
DATA: ti_vuelos LIKE STANDARD TABLE OF sflight,
st_vuelos LIKE LINE OF ti_vuelos,
v_flag TYPE sy-subrc.
* Procesar los datos de entrada
PERFORM procesar_datos TABLES ti_vuelos
USING st_vuelos
CHANGING v_flag.
*&-------------------------------------------------------------------------------------*
*& Form procesar_datos
*&-------------------------------------------------------------------------------------*
* text
*&-------------------------------------------------------------------------------------*
FORM procesar_datos TABLES t_vuelos STRUCTURE sflight
USING st_vuelos STRUCTURE sflight
CHANGING p_flag TYPE sy-subrc.
ENDFORM. "procesar_datos
Cuando una subrutina es llamada los parametros deben ser pasados en el mismo orden en el que fueron declarados, osea se debe respetar esta misma secuencia en el bloque FORM-ENDFORM
FORMAS DE PASAR PARÁMETROS existen 3:
Paso de parámetros POR VALOR
En esta forma los parámetros formales son creados como copias de los parámetros actuales. Los cambios en los parámetros formales no afectan a los parámetros actuales.
Ver ejemplo y escuchar explicación en audio
Paso de parámetros POR REFERENCIA.
Durante la llamada a la subrutina, solo la dirección de los parámetros actuales se transfieren a los parámetros formales. Dentro de la subrutina, se trabaja con el campo del programa que hace la llamada.
Si se cambia los parámetros formales, el contenido del campo del programa que hace la llamada también cambia.
Paso de parámetros POR VALOR Y RESULTADO.
Durante la llamada a la subrutina, los parámetros formales son creados como copias de los parámetros actuales. Los cambios en los parámetros formales son copiados a los parámetros actuales al final de la subrutina.
5. SUBRUTINAS EXTERNAS
Para llamar a una subrutina que esta en un programa distinto al que estamos procesando, se usa la siguiente sintaxis.
PERFORM <sub>(<programa>USING..)
También se puede agregar includes de subrutinas a nuestro programa de la siguiente manera:
INCLUDE <report>.