假设两种选择都会产生相同的结果,您通常会做出什么选择,为什么?
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
,也不需要在使用前使用CLEAR
或RESET
。
RESET
将始终将变量重置为其初始化值CLEAR
将变量重置为类型默认值。
示例:dcl-s myNum int(5);
CLEAR myNum;
->myNum
==0RESET myNum;
->myNum
==0
dcl-s myNum int(5) inz(5);
CLEAR myNum;
->myNum
==0RESET myNum;
->myNum
==5
附录
我唯一经常使用INZ的是数据结构。在没有INZ的情况下,DS被初始化为空白;而与子字段的数据类型无关。使用INZ,每个子字段都被初始化为其默认类型。
我在每个声明中都使用INZ。
想象一下,将DS添加到没有INZ关键字的子进程中。我可能不记得对DS进行INZ,尽管这对于获得子场的"自然"行为总是必要的。
我特别使用CLEAR或RESET来表示代码中正在发生需要我关注的事情——通常是重用变量。
在这种特殊情况下,我更喜欢第一个选项。只是出于习惯,总是初始化变量。如果我们谈论的是全局或静态变量,那么如果必要,我会使用clear或reset。它们可以包含此激活组中最后一次调用留下的值。
以下是我的看法。。。
- 使用INZ的优点:可以根据需要将其重置为0(即更好的可维护性)
- 使用CLEAR的缺点:一个额外的说明