o在Delphi中,SysUtils是一个ScanBlanks程序:
procedure ScanBlanks(const S: string; var Pos: Integer);
var
I: Integer;
begin
I := Pos;
while (I <= Length(S)) and (S[I] = ' ') do Inc(I);
Pos := I;
end;
Run Code Online (Sandbox Code Playgroud)
我想知道为什么程序使用I变量.我们不能Pos直接使用use var吗?
procedure ScanBlanks(const S: string; var Pos: Integer);
begin
while (Pos <= Length(S)) and (S[Pos] = ' ') do Inc(Pos);
end;
Run Code Online (Sandbox Code Playgroud)
是因为一些速度/内存惩罚?更有经验的人可以解释一下原因/差异吗?
小智 3
除了性能之外,在编写良好的代码中,这两个函数之间没有任何区别。
然而,在编写糟糕的代码中,存在巨大差异。使用局部变量可以更容易地推断函数的正确性。S记忆中存在着重叠的可能性Pos。Inc(Pos);您是否想预测如果修改字符串的内容或长度,过程将如何表现?
使用局部变量可以很容易地准确地看到会发生什么。我当然同意拥有S和Pos重叠将是对过程的可怕误用,但是过程的行为应该符合其规范,因此规范应该不允许这样的输入值,或者即使存在存在过程也应该按照指定的方式运行这样的输入值。获取什么有效、什么无效的精确细节是很棘手的。使该过程在所有情况下都按照指定的方式工作是很容易的。
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |