在子过程中,变量声明期间的INZ或使用CLEAR时,通常首选什么



假设两种选择都会产生相同的结果,您通常会做出什么选择,为什么?

dcl-proc test_proc ;
...
dcl-s count  int(5) inz ;
...
// use count
end-proc ;

dcl-proc test_proc ;
...
dcl-s count  int(5) ;
...
clear count
// use count
end-proc ;

此外,由于变量count的范围是局部的,我们甚至需要使用它们中的任何一个吗?

您不需要INZ就可以使用RESET。

但最好只在RESET值与CLEAR值不同时使用RESET。

使用RESET需要编译器生成额外的存储和额外的指令来保存初始值。

RPG独立变量被初始化为默认值。对于所有数字字段,默认值为0。

因此,对于本地(和非静态)变量,您不需要INZ,也不需要在使用前使用CLEARRESET

RESET将始终将变量重置为其初始化值
CLEAR将变量重置为类型默认值。

示例:
dcl-s myNum int(5);

  • CLEAR myNum;->myNum==0
  • RESET myNum;->myNum==0

dcl-s myNum int(5) inz(5);

  • CLEAR myNum;->myNum==0
  • RESET myNum;->myNum==5

附录
我唯一经常使用INZ的是数据结构。在没有INZ的情况下,DS被初始化为空白;而与子字段的数据类型无关。使用INZ,每个子字段都被初始化为其默认类型。

我在每个声明中都使用INZ。

想象一下,将DS添加到没有INZ关键字的子进程中。我可能不记得对DS进行INZ,尽管这对于获得子场的"自然"行为总是必要的。

我特别使用CLEAR或RESET来表示代码中正在发生需要我关注的事情——通常是重用变量。

在这种特殊情况下,我更喜欢第一个选项。只是出于习惯,总是初始化变量。如果我们谈论的是全局或静态变量,那么如果必要,我会使用clear或reset。它们可以包含此激活组中最后一次调用留下的值。

以下是我的看法。。。

  • 使用INZ的优点:可以根据需要将其重置为0(即更好的可维护性)
  • 使用CLEAR的缺点:一个额外的说明

相关内容

  • 没有找到相关文章

最新更新