前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模块化程序

模块化程序

作者头像
秋白
发布2021-11-09 18:28:26
5520
发布2021-11-09 18:28:26
举报
文章被收录于专栏:java小白

一、概述

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

二、子程序定义

代码语言:javascript
复制
PERFORM 

FORM.
~~~~
ENDFORM.

调用

代码语言:javascript
复制
PERFORM WRITE_DATA.

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

三、子程序参数

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

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

代码语言:javascript
复制
FORM subr USING p1 TYPE type 
									 VALUE(p2)	 TYPE type
									 ...
					CHANGING p3 TYPE type
					VALUE(p4)		  TYPE type		 	 

传递参数的方法

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

Call by Value

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

代码语言:javascript
复制
FORM subr USING ..VALUE(pi)[TYPE <t>|LIKE <f>].

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

Call by Reference

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

代码语言:javascript
复制
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语句搭配使用的情况

代码语言:javascript
复制
FORM subr CHANGING... VALUE(pi) [TYPE <t> | LIKE <f>].

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

四、TABLE语句

代码语言:javascript
复制
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,子程序名字后面要明确指定该子程序所属程序名(用括号)。可以根据条件动态地显示子程序的 名称。

代码语言:javascript
复制
PERFORM subr.
PERFORM subr(prog) [IF FOUND].
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、子程序定义
    • 调用
      • 传递参数的方法
  • 三、子程序参数
    • Call by Value
      • Call by Reference
        • Call by Value and Result
        • 四、TABLE语句
        • 五、调用子程序
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档