首页 > 代码库 > 模块化程序-子例程

模块化程序-子例程

子例程

1、子例程中应避免使用主程序的变量,应使用参数

2、在子例程中定义的变量,只在子例程中有效

 

子例程的定义方式:

以FORM开头、以 ENDFORM 结尾的ABAP代码块。

语法:

FORM  <subroutine>  [<pass>].

   <statement block>

ENDFORM.

其中:

  • <subroutine> 用于定义子例程名,
  • <pass> 参数<pass>选项也可以没有
  • 子例程可以访问其所在主程序中声明的所有数据对象。
  • 一般都将同一程序中定义的所有内部子例程都集中定义在程序的末尾。
  • 子例程的定义不能互相嵌套

技术分享

  • 形参和实参:
  • 形参(formal parameters):
  • 子例程定义期间用FORM语句定义的参数(形参不指明类型,则直接继承实参的数据类型)   数据变量、结构体、内表
  • 实参(actual parameters)
  • 子例程调用期间用PERFORM语句指定的参数

局部和全局变量:

全局变量:

  • 在主程序中定义的变量
  • 这些变量在整个主程序和调用的每个子例程中均可见(可进行处理)

局部变量:

  • 在子例程中定义的变量称作局部变量,
  • 这些变量只存在于相关的子例程中(与形式参数相同),只能在子例程中使用。

技术分享

 

参数传递:

将主程序变量传递给子例程形式参数

传递类型

    • 值传   using
      子例程中参数变量的值的改变,不影响外部程序实际变量的值
    • 引用传   changing
      若子例程中的参数变量的值发生了改变,那么,外部程序的实际变量的值也发生改变
    • 值传并返回结果  
      传递参数的方式同值传递相同,但在子例程执行过程中,变量值不改变,而结束执行后,把变量的最终值返回

模块化程序-子例程