我正在Delphi 10.3.3中使用带有分号异常的应用程序。我一直在阅读一些分号是可选的,这取决于编译器,而不是在语句之间。多年以来,我一直认为这是Delphi编译器允许的错误。如果它们在任何块结束语句之前被删除,我可以看到该应用程序正在编译。
[except]和[end]之间的分号是否在代码中有任何用途,例如更快的编译或运行时间,或其他用途?运行应用程序时,这会引发任何随机编译错误吗?
是否在结束之前或除了加速编译或运行时间之外在最后一行保留分号?一种方法比另一种方法更容易出错,还是容易发生随机编译或运行时错误?
这里的代码可以通过使用拖放默认设置创建的带有编辑框,按钮和备注框的表单放入任何测试项目中。
procedure TForm1.Edit1DblClick(Sender: TObject);
begin
if Length(Edit1.Text) > 0
then
Edit1.Clear
else
Edit1.Text := 'Edit1';
Button1Click(Sender)
end;
function TForm1.isThisUseful(this : string): boolean;
var
i: Integer;
begin
result := false;
try
if this = '' then
i := 0
else
i := 1
except
;
end;
result := (i > 0)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if isThisUseful(Edit1.Text) then
Memo1.Text := 'Yes it is useful'
else
Memo1.Text := 'This is a waste of time.'
end;
tl; dr:没什么区别。
try
// do stuff
except
;
end;
此分号可以删除。它绝对没有任何作用。它没有好处,也没有害处(除了它会使源代码看起来很奇怪,应该避免)。
begin
DoThis;
DoThat;
end;
因为在Delphi中,分号separate语句,所以不需要end
之前的最后一个分号。它绝对没有任何作用。是否要(主要是个人品味,就个人而言,我有时会拥有,有时不想要)。
使用此分号的一个好处可能是您可以不经修改就将其行移动或复制到另一个位置,而不是修改其所在的最终语句。恕我直言,这是非常小的好处;如果有必要,添加分号并不难。 奖励注释:result := (i > 0)
对我来说确实很奇怪。我希望Result := i > 0
没有多余的括号。 (这可能是因为我几乎每天都在Delphi中编程超过20年。)