Progress-gl - 将变量声明放在过程之上有什么好处



我做Progress 4GL已经8年了,尽管这不是我的主要职责。我更喜欢C++和Java。当用其他语言编程时,建议使用接近用法的声明。然而,对于4GL,我看到人们将声明放在文件的顶部。它甚至在编码标准中。

我认为将它们放在文件的顶部会导致"垂直分离"问题。在大多数其他语言中,甚至建议在声明的同一行进行赋值。

问题是为什么建议在4GL中这样做?有什么好处?我知道可以将声明放在文件中的任何位置,因为它是在使用之前声明的。

我认为答案是与Progress 4GL中的作用域或缺乏作用域有关。

如果你习惯了Java,比如说,并阅读了Progress 4GL程序,它看起来像

DO:
    DEFINE VARIABLE x AS INTEGER INITIAL 4.
    DISPLAY x.
END.

那么您就不会期望能够在程序中的任何其他地方使用x的值,并且在块中所做的任何更改都不会影响块之外的任何内容。

据我所知,在程序主体中声明的所有进度变量的范围都是整个程序,除非它们被声明在内部过程或函数中,在这种情况下,它们的范围是过程或函数。

(顺便说一句,您在内部过程/函数中使用的任何默认缓冲区[即未声明的]都是整个程序的范围,而不仅仅是过程或函数,因此您需要非常小心地在打算递归使用的函数中显式声明缓冲区)。

因此,我认为在程序开始时声明变量的惯例是为了反映这样一个事实,即无论您将声明放在哪里,Progress都会处理它们。

当程序的作用域可以更小时,将任何东西作为一个整体进行作用域确定绝对没有好处。

更小的作用域更容易测试,命名空间冲突的可能性更小,出错的机会也更小。

在写入数据库时,作用域严格的命名缓冲区特别有用,因为它们消除了代码中其他部分使用相同缓冲区并导致共享锁定的可能性,即编译失败:

do for b-customer transaction:
    find b-customer where .... exclusive...
    ...
end.
...
find b-customer...

另一方面,与代码主体共享作用域的过程和函数(包括文件…)是错误的主要来源,因为当你拿起变量或其他什么东西时,你永远无法完全确定它在哪里。。。

当然,所有这些都只是基本的结构化编程。每种语言都是如此,自70年代以来一直被接受。

您通常看到在顶部定义的变量的"原因"很简单。习惯在过去糟糕的日子里,事情就是这样做的。

很多旧代码,或者说是由旧化石编写的代码,都是这样写的。无论语言如何。

一些语言(脑海中浮现出COBOL)甚至将其形式化

这样做有什么好处吗?

不是特别的。我想你可以说"它们都在一个地方,很容易找到",但这并不是很有说服力。

"习惯"实际上更有说服力;)如果你与一个期望某种风格的团队合作,或者在一个特定风格盛行的应用程序中工作,那么在单方面放弃一种新的做事方式之前,你应该三思而后行——混乱可能比获得的优势更大。

最新更新