Diferencia entre Subrutinas y Modulos de Funciones

Hola amigos, tengo una pregunta a ver si me sacan de una Duda, con relación a la Modularización en ABAP cual es la diferencia entre una Subrutina y un Modulo de Funciones, si ambas son piezas de código reutilizables que se le puede pasar parámetros? Una es mas recomendable que la otra en ciertas circunstancias? Gracias

Seguro que se pueden decir un montón de cosas, las que se me ocurren a bote pronto son:

  1. las subrutinas mejor usarlas solo dentro de los reports donde se definen. Aunque se pueden referenciar desde otros reports, pero al ser desarrollos z, siempre pueden dar problemas porque luego uno cambio algo de la subrutina y no recuerda que se le llamaba desde otro sitio.

  2. Si realmente vas a usar esa parte de código en varios lugares yo te recomendaría un módulo de función. Estas están más localizadas y son más fáciles de encontrar. El “problema” de estas es que le tienes que crear un grupo y requieren algo más de trabajo.

  3. Otra solución, en lugar de crear un módulo de funciones es crear un clase con un método al que llamar. Esto sobre todo si quieres tener englobado en una unidad funcional varias funciones, que en este caso se llaman métodos.

2 Me gusta

Una subrutina es directamente parte de la modularización de un reporte o programa, pertenecen a éste, mientras que el módulo de funciones puede considerarse un programa a parte (ya que dentro de estos también existe la modularización, y lleva subrutinas como tal).

La diferencia podría ser que las subrutinas te pueden ayudar a que tu código sea más fácil de entender manteniéndolo más organizado (una subrutina distinta para limpiar variables, hacer consultas, mapeos, etc.) dentro de un mismo programa, mientras que los módulos son programas que pueden ser llamados fácilmente desde otro programa para cumplir un proceso en específico (y recordar que también podría llevar subrutinas).

1 me gusta

Este tema se cerró automáticamente 91 días después del último post. No se permiten nuevas respuestas.