我通常是一名C#程序员,去Delphi充满了“有趣”的发现。让我感到困惑的是德尔福的单一陈述。
示例C#block
if(x)
Foo();
else
Bar();
示例Delphi块:
if x then
Foo() //note missing semicolon
else
Bar();
他们要求分号不在那里的目的究竟是什么?有没有可以追溯到Pascal的历史原因?
Pascal中的分号与C及其衍生物之间存在差异。
Wikipedia解释了这个含义:
这种差异主要表现在两种情况:
- 在Pascal中,它之前永远不会有分号,而在C中它是强制性的(除非使用块语句)
- 结束前的最后一个语句不需要后跟分号
一个多余的分号可以在结束前放在最后一行,从而正式插入一个空语句。
真正的原因;
不允许在if-then else
面前避免与其鲜为人知的堂兄,else
的情况模棱两可。
请观察以下代码段。
case enum1 of
male: writeln('hallo');
female: if a=1 then writeln('oops'); <<-- watch this space.
else writeln('neither')
end;
因为在oops行之后有一个;
,else属于case语句而不是if。如果你遗漏了;
,那么其他人属于a = 1 if
。
这就是为什么;
不允许在if
前面。
我个人在Pascal工作了大约20多年,我仍然把;
放在其他方面,因为我把;
放在C风格。并且编译器仍然让我烦恼,你认为编译器现在已经学会了。