Sim*_*mon 5 delphi compiler-warnings
假设我有以下代码:
function DoSomething:Boolean;
var obj : TMyObject;
i : Integer;
begin
Result := False; //We haven't executed GetValue() correctly yet
obj := TMyObject.Create();
try
//perform some code that may produce an exception
i := obj.GetValue();
//Set the return to True as we executed GetValue() successfully
Result := True;
finally
//do some cleanup
obj.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
Delphi编译器抱怨分配给Result的值从未在第一行中使用.
我可能错过了一些明显的东西,但我不明白为什么编译器会优化它(如果优化已经开启).
我一直被教导要明确设置我的变量,以免混淆他们的价值观.最重要的是,如果GetValue()
函数生成异常,该Result := True;
行将永远不会执行.因此,无论Delphi初始化变量是什么,我们都会受到怜悯.
这是安全/可接受的代码吗?我应该简单地删除方法的第一行,这会使它更难阅读吗?如果失败,我将不得不关闭特定的编译器警告,但我不愿意这样做,因为此警告消息可以提供有用的信息.
Dav*_*nan 15
编译器是正确的.将False赋值给结果是徒劳的,函数可以返回的唯一值是True.
两种可能的执行路径是:
解决方案很简单,删除将Result设置为False的代码行.在这一点上,完全清楚的是返回值没有任何意义,你可以简单地将函数转换为一个过程.
你的函数只有两个结果。它要么返回True
,要么引发异常,因此您可以将其转换为过程以使警告消失。
如果您希望函数的结果是引发异常False
时的结果GetValue()
,则必须捕获该异常DoSomething
并将返回值设置为False
. 在这种情况下,您应该启动函数并将返回值初始化为True
。
像这样的东西:
function DoSomething:Boolean;
var
obj : TMyObject;
i: Integer;
begin
Result := True;
obj := TMyObject.Create();
try
try
i := obj.GetValue();
except
Result := False;
end;
finally
obj.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3583 次 |
最近记录: |