模块化程序

一、概述

子程序从FORM语句开始执行直到遇END FORM结束,使用子程序的主要目的在于代码模块化、结构化及重复利用。

二、子程序定义

PERFORM 

FORM.
~~~~
ENDFORM.

调用

PERFORM WRITE_DATA.

FORM WRITE_DATA.
  WRITE:/ 'WRITE_DATA'.
ENDFORM.

三、子程序参数

参数是指调用子程序时用于传入、传出的值。子程序中的参数与一般用DATA语句定义的局部   
变量相同。调用子程序时使用的参数叫实参,在子程序中使用的参数叫虚参。PERFORM利
用USING、CHAING定义参数,且使用时要与子程序的顺序一致。参数可以使用ABAP的所有
对象,即基本数据类型、Field Symbol、内表等。

下列语句给出了子程序中可以使用的多种选项

FORM subr USING p1 TYPE type 
									 VALUE(p2)	 TYPE type
									 ...
					CHANGING p3 TYPE type
					VALUE(p4)		  TYPE type		 	 

传递参数的方法

子程序用Using和Changing语句传递参数,其方法共分为三种。
  1. Call by Value
    传入参数即实参与传出参数即虚参有不同的物理内存
  2. Call by Reference
    共有相同的物理内存并且互相传递地址。
  3. Call by Value and Result
    传入传出遍历语句执行成功时返回变更后的值。拥有不同的物理地址

Call by Value

Call by Value 是指使用USING关键字传递参数时与VALUE语句一起搭配使用的情况。

FORM subr USING ..VALUE(pi)[TYPE <t>|LIKE <f>].

VALUE语句中虚参占用自己的单独内存。调用子程序时,实参值复制到虚参中,即使改变虚参的值也不会影响实参值。

Call by Reference

Call by Reference是指使用CHANGING关键字传递参数时的情况,此时会修改传递到子程序的参数值。

FORM subr USING ... pi[TYPE <t>| LIKE <f>]...
FORM subr CHANGING ...pi[TYPE <t>|LIKE <f>]...

子程序的虚参没有自己的内存空间。只是在调用子程序期间占用实参的地址。即在调用Subroutine的程序的内存地址(相同名字的变量)中进行工作。
若在FORM语句中不使用VALUE语句,则USING与CHANGING语句功能是相同的,但出于代码可读性区分为“使用”、“变更”。USING代表传递数据,CHAING代表传递数据后变更其值。为了避免发生实参值在调用子程序后不被修改的情况,当使用USING时要与VALUE语句一起搭配使用。

Call by Value and Result

介绍使用CHANGING语句传递参数时与VALUE语句搭配使用的情况

FORM subr CHANGING... VALUE(pi) [TYPE <t> | LIKE <f>].

USING语句与VALUE语句一起搭配使用,则无法修改子程序的实参值,但是CHANGING语句与VALUE语句一起配套使用时,当正常结束子程序时会修改实参值。

四、TABLE语句

TYPES:BEGIN OF t_str,
col1 type c,
col2 type i ,
END OF t-str.

TYPES:t_itab TYPE TABLE OF t_str.

DATA:gt_itab TYPE t_itab.
PERFORM test_itab TABLES gs_itab.

FORM test_itab TABLES pt_itab TYPE t_itab.

ENDFORM.

五、调用子程序

调用子程序的方法有Internal、External两种。通过PERFORM语句不仅能调用ABAP程序内部子程序,还可以调用其他程序的子程序。调用外部程序子程序的情况,称之为External Call,子程序名字后面要明确指定该子程序所属程序名(用括号)。可以根据条件动态地显示子程序的 名称。

PERFORM subr.
PERFORM subr(prog) [IF FOUND].
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值