SAP | 子例程
子例程主要用于局部模块化。 尽管可以从其他 ABAP 程序外部调用它们,但通常从定义它们的程序本地调用它们。 子例程对于程序内的可重用性很有用,它们可以在任何 ABAP 程序中定义。
子例程在 FORM 和 ENDFORM 语句之间维护,并使用 PERFORM 语句调用:
参数接口允许你向子程序传递数据,是通过在 FORM 语句上直接声明变量来定义的,这些变量称为形式参数;形式参数由 PERFORM 语句通过维护 PERFORM 语句中的参数来填充,这样的参数称为实际参数;如果子例程在 FORM 语句中定义了变量,则 PERFORM 语句必须将值传递给定义序列中的每个变量。
在定义形式参数时,它们可以是有类型的或无类型的。当使用无类型的形式参数时,你可以将任何数据类型或长度的变量传递给它。比如,你将长度为 2 的字符传给形参 p1,那么 p1 就变为一个长度为 2 的字符。
参数可以通过两种不同的方式传递给子例程:
传递值的输入参数(称为按值传递参数)
传递值的输出参数(称为按值传递和结果参数)
传递值的输入参数
参数传值时,实参和形参占用各自的内存空间。 当调用子例程时,实际参数的值被传递给形式参数(它创建原始数据的副本)。 如果形参的值发生变化,对实参没有影响。
应避免按值传递参数,尤其是在传递大型内部表时。 但是,按值传递允许使用原始数据的副本而不必担心更改原始数据,因为实际参数的值永远不会改变。 实际参数用于子程序接收的输入参数。
传递值的输出参数
如果要使用输出参数的副本,可以通过使用带有 CHANGING 语句的 VALUE 添加来传递它们。 这样就为形参创建了一个新的内存,将实参的内容复制到形参中(类似于传值的入参)。
如果子程序因错误消息而过早终止,则实际参数保持不变。 这允许你仅在满足所有条件时更改实际参数,这与传递参考案例不同,其中实际参数会立即更改。
版权声明: 本文为 InfoQ 作者【暮春零贰】的原创文章。
原文链接:【http://xie.infoq.cn/article/af4784555623b8a78d81955ce】。文章转载请联系作者。
评论