【问题标题】:Inline declarations: var vs const内联声明:var vs const
【发布时间】:2021-09-21 23:55:02
【问题描述】:

当我使用内联声明时,我应该更喜欢const 而不是var

在所有在线示例中,甚至在 Delphi 自己的文档中,我都看到使用了 var。但是,我认为const 通常能更好地表达我的意图,并防止意外修改。

小例子来说明我的意思:

{$APPTYPE CONSOLE}

program VarVsConst;

uses
  Spring.Collections,
  System.SysUtils;

function UsingVar:string;
begin
  var dict := TCollections.CreateDictionary<string, Integer>;
  dict.Add ('one', 1);
  var pair := dict.ExtractPair('one');
  Result := pair.Value.ToString;
end;

function UsingConst:string;
begin
  const dict = TCollections.CreateDictionary<string, Integer>;
  dict.Add ('one', 1);
  const pair = dict.ExtractPair('one');
  Result := pair.Value.ToString;
end;

begin
  Writeln(UsingVar);
  Writeln(UsingConst);
  Readln;
end.

那么,UsingConst 实现有什么缺点或危险吗?

【问题讨论】:

  • 不,请随时使用const
  • 如果你需要一个常量,使用const。如果需要变量,请使用var
  • @RemyLebeau:哈哈,有创意的回答! :D 我可以将您的评论翻译成:“使用内联常量时没有陷阱”?
  • @WoutervanNifterick:是的,这是正确的说法。

标签: delphi constants inline-variable


【解决方案1】:

我认为不利的一面是程序更容易“被黑”。这是一个静态值。不确定当你有一个像 str := 'password' 这样的 var 赋值时还有多少缺点,但你明白了,这更像是一个“一般”的 const 意见。在你的例子中,我真的看不出有什么不同,但是如果有的话,有比我更聪明的人可以发现它。

我喜欢 const,一旦分配了它,你就不会意外地把事情搞砸了。如果我担心黑客攻击,我可以在事后改变事情,更接近发布。

【讨论】:

  • 恐怕我不明白你的意思。此外,const X := TMyObject.Create 不会使对象 X 指向不可变(但 X 指针不能更改)。
  • 两个版本生成的代码是一样的。常量是编译器强制执行的。黑客入侵的可能性根本不是问题。
  • 对我来说,这个问题可以从两个方面来看。一,在我的具体例子中,是否有任何缺点。或者两个,作为一般规则,使用 const 与 var 是否有任何缺点。我的意思是,他确实在开始和结束时都问了这个问题。我认为你的 cmets 是正确的,并同意你关于他的例子。因此,为什么我说“在您的示例中,我没有看到太大的区别”,但我认为我对此还不够清楚。在动态内存分配中使用 const 比使用 const UserName = "Fred" 安全得多。
  • 最后一条评论,这并不是 Delphi 的问题,而是更多的一般性编程思想,因此它可能适用于也可能不适用于特定论坛的语言。不幸的是,在当今世界,勒索软件总是潜伏在阴影中。我已经编写软件很长时间了,并不是说它让我比任何人都更聪明或更好,这只是我喜欢做的事情。我最讨厌的是这些天我必须越来越多地扮演保安警察。我怀念过去只是解决问题、让事情变得更快、更高效的日子。
猜你喜欢
  • 2011-05-01
  • 2011-10-28
  • 2011-12-16
  • 2021-02-12
  • 2014-04-25
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多