问题是:不是更好吗?
答案是:这取决于,因为这类事情完全是主观的。除非你是或者像机器一样思考。
是的,对所有复合语句强制执行 begin/end 会满足一些一致性问题,但是如果周围的语言元素已经提供了一个自然的外壳,那么要求这个是完全多余的。
考虑 CASE 语句:
// "Sensible" syntax
case VALUE of
1: DoSomething;
2: begin
DoSomethingElse;
DoMore;
end;
else
DoForAllOtherValues;
DoMore;
end;
与不太明智但更一致和“合乎逻辑”的对比:
case VALUE of
1: DoSomething;
2: begin
DoSomethingElse;
DoMore;
end;
else
begin
DoForAllOtherValues;
DoMore;
end;
end;
请注意,最后的“结束”是“案例”的一部分。你不能没有它。
我相当确定在早期版本的 Chrome(后来成为 Oxygene 和随后的 Prism)中,这实际上是 case 语句所需的语法。如果是这样,它不再是这种情况。常识大概占了上风。
在我个人看来,满足 OGoSC(句法一致性的客观神)可能会激怒可能较小但实际上与你我更相关的 SGoHRaC(人类可读性和理解力的主观神)。
尽管在许多情况下它可能看起来并非如此,但我们人类实际上并不是机器。我们不需要将规则简化和减少到最小的一致集以使解析文本和理解它成为可能。我们需要一些规则,但我们可以处理更多,因为我们相对于机器的最大优势是思想自由,可以将我们从严格的句法和结构体系中解放出来,尤其是在这种句法和结构与冗余无关的情况下。
在这种情况下。
如果您犯了编译器无法解释的错误,它会在您每次编译时告诉您。但是编译器不会感谢你让代码“更容易”“阅读”(编译器只是遵循它给出的规则——它不会让编译器“更容易”通过改变代码来“阅读”代码)它已经可以完全愉快地遵循的规则)。
如果你强加任意规则,使其更难阅读(不是因为规则或多或少是不变/一致的,而是因为你强加了一个一致的结构,它本身包含更多的噪音和必须过滤的冗余信息),那么你将支付人类生产力的价格。
事实上,这些“更容易”更“一致”的规则,实际上可能会让一切变得更难……再考虑一下 CASE 语句。
为了使复合开始/结束有意义,我们必须使“case”成为一个独立的语句,而不是 case/end 对的一部分,因此所有这些都应该是有效的语法:
case VALUE of
1: DoSomething;
2: DoSomethingElse;
case VALUE of
1: DoSomething;
2: DoSomethingElse;
else
DoOther;
case VALUE of
1: DoSomething;
2: begin
DoSomethingElse;
DoMore;
end;
else
DoOther;
case VALUE of
1: DoSomething;
2: begin
DoSomethingElse;
DoMore;
end;
else
begin
DoOther;
DoMoreOther;
end;
case VALUE of
1: DoSomething;
2: begin
DoSomethingElse;
DoMore;
end;
您可能不同意,但在我看来,突然之间这种更一致的语法实际上导致实际代码中的一致性降低,即使编写代码所遵循的规则具有更高的一致性。