使用Delphi你比其他语言更有可能重用临时变量吗?

时间:2009-07-21 12:53:15

标签: delphi variables

由于Delphi让你一直到方法的var部分来声明一个局部变量,你是否发现自己比在大学时更频繁地破坏"Curly's Law"(重新使用变量)?(当然,除非你在大学里编写Pascal编程。)

如果是这样,你怎么做才能打破这种习惯,特别是在需要获取和/或设置大量属性的函数中。是否有可以声明TempInt : IntegerTempStr : String的阈值。 (你有时在Temp使用'e'而不是其他时间吗?)

11 个答案:

答案 0 :(得分:15)

我几乎没有重用变量。我不想说永远,但它接近永远不会

原因如下:

  • 小方法(将方法和属性 - getter / setter保持尽可能简洁是一种很好的做法)。
    • 当只做一件事时,不需要重用变量
    • var部分始终在屏幕上。
  • 编译器会根据需要重用存储,因此重用只是一个 lazy coder crutch 而没有性能改进。
  • 如果我感到懒惰,较新版本的Delphi有 CTRL + SHIFT + V 来声明变量。
  • 重用变量使调试变得更加困难 - 花费更多时间和精力进行维护然后开发(对于任何严肃的应用程序),所以总是做些事情来使使维护更容易,甚至如果它让开发变得更难一点。
  • 首选用户定义的类型,因此帐户余额是特定类型,而不仅仅是货币。这意味着变量不太可重用无论如何。
  • 对于循环变量(一个常见的重用变量)使用较少,因为我们可以将用于一起跳过迭代器
  • 我的变量有描述性名称,因此在上下文中使用它们是没有意义的。

一般来说,我喜欢将所有变量放在顶部,原因与我在单位上有接口部分的原因相同。这有点像在纸上写一个摘要 - 让我对所发生的事情有一个大概的了解,而不必阅读整篇论文。 Delphi可以从能够在 for 循环或其他 begin / end 块中的“内部范围”声明变量中受益,但我不知道有多少会分散Delphi代码的清晰度和可读性。

答案 1 :(得分:6)

这只是纪律问题。是的,内联变量声明可能会更好地服务于Delphi,但这并不是什么大问题。只需确保以描述性方式命名变量,然后错误地使用它们会感到尴尬。而且,正如Stephan Eggermont所说,如果你的方法真的那么久,那就是完全不同的代码味道。

答案 2 :(得分:5)

不是真的。由于我的方法非常小,因此var部分并不遥远。由于我的方法规模自大学以来已经减少很多,我会说我不经常打破它。

答案 3 :(得分:5)

如果例程有几个不同的迭代部分,我肯定会重新使用像'Findex'这样的局部变量(或者只是简单的'i')。这不是我猜的最佳实践,但我想我在这里做的很明显,显然用法并不重叠。

回到例程的顶部并键入新变量通常并不是什么大不了的事,虽然我不知道Ctrl-Shift-V(稍后会尝试!)。

看到其他人说的话会很有趣。 : - )

答案 4 :(得分:3)

我不倾向于将本地变量重用为一般安全规则。我很喜欢d2007 +中新的“var”实时模板。只需输入var [tab],弹出帮助器即可。另请查看Ctrl-Shift-D(其他人提到Ctrl-Shift-V表示本地变量)来声明一个字段。

答案 5 :(得分:2)

声明变量非常简单 - 有时它们会自动创建('for'循环模板),有时你可以使用'Declare Variable'重构(或者如果你使用MMX那么'添加Local Var') - 就像你一样应)。

答案 6 :(得分:2)

您可以根据需要开发自己的编码样式。我通常在需要时使用具有一些临时变量(10%)的独特变量(90%)。

这取决于var的性质。如果它是一个var来帮助支持其他代码(循环计数器,构建SQL字符串等),那么可以重用的临时变量是有帮助的。在这种情况下,你的临时变量在代码段中可用作“一次性”变量。只需在var声明中添加注释即可指示临时变量。

即。 //根据此程序的要求重新使用临时变量 - >在使用之后/之前清除/重新初始化它们。

除此之外,我避免临时变速器和从不使用它们来保存关键数据。应该使用一个独特的变量来避免混淆。使代码的可读性/维护更清晰。

答案 7 :(得分:1)

我认为delphi会因过度使用临时变量而异常。大多数时候,当我创建一个函数/过程,我知道我将需要循环或临时字符串,我首先要做的是创建一个var i,j:integer; TMP:字符串;并根据需要添加更多:)

答案 8 :(得分:1)

如果没有将CTRL-SHIFT-V作为VAR部分的快捷方式,我可能会发现这是一个更大的问题。我不是在这里写GIGANTIC方法,但有时它们会失控(我当然可以证明这一点)并且它有很大帮助。我不确定这个快捷方式是来自cnTools还是GExperts,但它们都非常有用,我推荐它们。

答案 9 :(得分:1)

作为Delphi的长期用户(从1.0开始),这是我讨厌Pascal的主要问题。所有其他现代语言都支持使用时的定义,但Delphi坚持使用var部分,Delphi程序员坚持使用荒谬的挥手动作来证明它的合理性。

答案 10 :(得分:1)

Curly确实有一个好点。我偶尔会在这方面成为一个罪人。通常只是一个临时字符串变量,方便了它。

说实话,我从未真正考虑过......直到现在。我对VAR部分没有任何问题,因为这是自Delphi 1.0以来形成的习惯。

要回答这个问题,我只重复使用一个临时变量,通常是一个字符串,通常只是为了获得一些轻微的性能提升。没问题。