Sal*_*dor 2 delphi try-finally try-except
在一些应用程序,我维护的地方很多,我发现它使用一个代码try/finally或try/except块一个for loop或if句子避免使用开始/结束
考虑下一个代码(不是生产代码,只是一个样本)
{$APPTYPE CONSOLE}
{$R *.res}
uses
Classes,
SysUtils;
Procedure TestNoBeginEnd;
var
i : Integer;
L1 : TStringList;
begin
for i := 1 to 10 do
try
L1:=TStringList.Create;
try
L1.Add('Bar');
L1.Add(IntToStr(i));
L1.Add('Foo');
finally
Writeln(L1.Text);
L1.Free;
end;
except
on E: Exception do
Writeln('Opps '+E.ClassName, ': ', E.Message);
end;
end;
begin
try
TestNoBeginEnd;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
问题,被认为是一种不好的做法,代码嗅觉或使用try/finally或try/except而不是delphi中的begin/end存在任何缺点?
UPDATE
对于愚蠢的示例代码我很抱歉,只是为了澄清try/finally并尝试/除了不假装替换开始/结束,只是为了避免使用它(开始/结束)当存在使用时的情况try/finally或try/except不需要开始/结束.
我个人认为没有必要begin..end在a附近添加额外的内容try..finally/except..end,特别是当代码在之前try或之后添加代码的可能性很小时end.
话虽这么说,问题会比较我们是否需要一个系统begin..end后,..do或..then只有一条指令(在你的情况下,即使try..指令).
这主要是风格和习惯的问题,有些人更喜欢防御性地编码并系统地设置一个开头......其他人尽量避免不必要的线路.
当涉及到相当多的行时,我倾向于添加begin..end以使范围更明显.
我会说,使用良好的判断力,看看有人(或你)稍后修改代码可能会错过预期范围的可能性.