Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何在RPG free中循环X次而不创建变量?_Loops_Recursion_Procedure_Rpgle - Fatal编程技术网

Loops 如何在RPG free中循环X次而不创建变量?

Loops 如何在RPG free中循环X次而不创建变量?,loops,recursion,procedure,rpgle,Loops,Recursion,Procedure,Rpgle,我有一段我正试图转换的旧代码 非常简单,只需循环10次 C DO 10 C* code C ENDDO 为了在自由语法中使用for循环,需要创建一个变量。例如: FOR I = 1 TO 10; // code ENDFOR; 不需要创建新变量就可以实现这一点吗?没有,但在RPG IV中,这不一定是个问题。在RPG IV中,您可以使用过程,并且过程可以有局部变量。RPG 400及之前仅允许

我有一段我正试图转换的旧代码

非常简单,只需循环10次

C                   DO        10
C* code 
C                   ENDDO
为了在自由语法中使用
for
循环,需要创建一个变量。例如:

  FOR I = 1 TO 10;
    // code
  ENDFOR;

不需要创建新变量就可以实现这一点吗?

没有,但在RPG IV中,这不一定是个问题。在RPG IV中,您可以使用过程,并且过程可以有局部变量。RPG 400及之前仅允许全局变量。但是,如果在RPG IV程序中使用子例程,则仍然必须使用全局变量

你还没有使用子程序,是吗

以下是语法上的区别:

自由状态下的子例程:

exsr mysubroutine;

...

begsr mysubroutine;

   ...

endsr;
用最少的子过程看它是什么样子

myProcedure();

...

dcl-proc myProcedure;

   ...

end-proc;
如果不传递参数,则严格来说不需要在过程名称后加上
()
,但我还是这样做了,因为它提示我这是一个过程,而不是一个随机变量或单独在一行上的其他名称,甚至在表达式中

程序的优点

  • 可以为这些循环声明局部变量
  • 您仍然可以使用子例程使用的所有全局变量
  • 您可以传递参数
  • 您可以返回一个值并在表达式中使用该过程
  • 过程可以递归调用
  • 哥查斯

  • 您仍然可以使用子例程使用的所有全局变量
  • 除非在过程中定义了子例程,否则不能从过程中调用该子例程
  • 不能从过程外部调用过程内部定义的子例程

  • Gotchas#2和#3意味着最好将所有子例程转换为过程。这样做不会有任何副作用。

    这真是个好主意。我将尝试使用正在进行的程序。毫无疑问,对于我来说,所有遗留代码都是一项太大的任务,无法转换为过程。我也不会转换东西,除非我有理由这样做。