变量名称需要多长时间?

时间:2011-08-12 17:45:27

标签: variables

我想,我正在寻找既有技术性又有见解性的答案。

变量名称需要多长时间?

我总是尽量使变量尽可能短,同时保持适当的含义。但是,随着一些“子例程”的复杂性增加,我发现需要创建更长的变量名来继续让它们变得有意义。变量的长度是否会影响性能?

例如,我刚刚使用了MBReadPerSecondAverageAfterLastFlushToLog,它与我希望自己来的supercalifragilisticexpialidocious非常接近。

谢谢,

马特

P.S。很抱歉,如果你现在有一首Mary Poppins歌曲。

3 个答案:

答案 0 :(得分:7)

尽可能缩短命名变量是正确的,同时保留足够的含义,只需查看其名称即可描述变量的作用。

不,变量名称的长度与性能完全无关。

编辑:

出于某种原因,我以为你在谈论C ++。如果您是(或C或Delphi或其他编译语言),则上述内容是正确的(除非调试信息不​​会出现在发布可执行文件中)。

对于Lua,Python或Ruby等动态语言,变量名的长度很可能会影响运行时性能,具体取决于执行变量名称查找的方式。如果对变量名进行散列,然后使用散列索引值表来获取变量的值,那么通常情况下,散列函数必须处理的数据越多,所需的时间就越长。

那就是说,为了简短的变量而牺牲有意义的变量名称只是因为你认为它们会更快。速度增加通常是极其微不足道的,肯定不值得牺牲程序的可维护性。

答案 1 :(得分:1)

只要清楚明白就行。但是,在您的示例中,您可能会遇到其他一些问题。

  1. 变量的名称向我表明您拥有一个具有多个责任的功能。

  2. 这不是对象的用途吗?想象一个名为Reads的对象,这只是一个非常简单的例子,无论如何都可能匹配你需要的东西。

      Reads.AveragePerSecond  
      Reads.Size  
      Reads.IsLoggedFlushed
    

答案 2 :(得分:0)

我认为这里的主要问题是您忘记了变量不是某种全局唯一标识符。它们具有上下文,可以帮助解释它们。通过阅读它们,您通常会知道上下文:名称空间,类名称,方法名称,前几行的含义,通过给变量赋值的方法名称,或者在您的示例中,一些基本的科学知识(例如MBps)是数据传输速度的单位,速度始终由平均值来衡量,等等。如果上下文解释了其余内容,那么MBReadPerSecondAverageAfterLastFlushToLog可以很容易成为Speed ...

为了让您更容易理解是否想要啤酒,而不仅仅是对女友说Give me a beer please!而不是Give me an 5°C Gösser beer from the fridge I bought yesterday in the shop for 1$ please!

  

引入对象会产生什么样的开销?没有声明   变量少得多吗?

这可能是过早的优化。首先,您编写代码,然后再查找瓶颈...

  

我已经有一个“ ReadFiles”方法,其中   像MBReadPerSecondAfterFlushToLog一样,   KBReadPerSecondAverageAfterLastFlushToLog,   找到了MBReadPerSecondAveragePerReadOperation等等等。

如果前两个变量大致相同,则这些变量可能为ReadSpeadAfterFlushToLog,并且您应该有一个DataTransferSpeed类,该类将在需要时为您进行单位转换。第三个变量可以是AverageSpeedPerReadOperation。如果我们这里只有阅读速度,并且上下文描述了它,例如方法名称包含该信息,那么甚至可以省略Read部分。如果变量太多,则可能需要多个较小的方法,并且可能希望将与结构和对象一起使用的变量分组。