为什么模块和程序名称在主体之后重复?

时间:2018-05-29 14:46:58

标签: language-design modula-2 oberon

在Modula-2和Oberon中,每个模块和过程声明必须以模块或过程的名称结束。 Pascal不需要它。我从来没有真正理解这一点的动机。有人可以开导我吗?

2 个答案:

答案 0 :(得分:3)

在阅读了一些(我不是专家)后,我会打赌这只是函数的语法要求,以提高可读性。

我会更进一步,并用其他语言编写的大型,旧的,写得不好的程序/功能说,有时候这种语言不需要它。我经常看到:

int veryLongC++Function() {
    ...
    ...
    ... 3000 code lines
} //veryLongC++Function

因此,一个接近结尾的读者知道他们正在看什么。 8月在评论中提到,如果没有被编译器强制执行,那么在名称更改的情况下,这个问题就不那么强大了。

另一个重要方面是嵌套过程 - 这里显式结尾使事情更具可读性 - 例如checkout chapter 7 - 在声明之间和BEGIN之前声明嵌套过程。语法使这看起来更好(在我看来)。

故事很长 - 我认为主要的好处是可读性。

答案 1 :(得分:2)

您可能会收到类似这样的信息:

MODULE A;
  ...
  PROCEDURE B;
    ...
    PROCEDURE C;
    ...
    BEGIN (* C *)
      ...
    END C;
  BEGIN (* B *)
    ...
  END B;
BEGIN (* A *)
  ...
END A.

在这种情况下,为了便于阅读,在代码末尾有三个主体(如果定义了嵌套过程和函数,则还有三个主体)。为了查看以END子句结尾的那个,最好是编译器可以检查是否正确关闭了所有内容(如您所见,我什至把它作为注释,但是如果编译器接受它作为有效的标识符并检查以确保一切正确,则很好---在开头BEGIN body子句中)