2

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

4

2 回答 2

5

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

我会更进一步,说在其他语言中写得很糟糕的大型、陈旧、糟糕的过程/函数,有时不需要语言就可以完成。我经常看到:

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

因此,接近结尾的读者知道他们在看什么乱七八糟的东西。August 在评论中提到,当编译器不强制执行时,这会变得不那么健壮 - 以防名称更改。

另一个重要的方面是嵌套过程——这里显式的结尾使事情更具可读性——查看第 7 章的例子——嵌套过程在声明之间和BEGIN. 语法使这看起来好多了(在我看来)。

长话短说——我认为主要的好处是可读性。

于 2018-05-29T14:58:19.733 回答
2

你可能会得到这样的东西:

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

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

于 2020-02-28T18:00:03.493 回答