2012-06-22 152 views
3

我们在团队中对代码的小小和平进行了大讨论。干净的代码和重构。额外的本地变量

示例1开发人员添加了额外的局部变量以使代码更具可读性。在局部变量中,他从常量中保存了值。

示例2相同的代码没有额外的变量,但从我们的开发人员的角度来看可读性较差。

您认为什么更具可读性? 从重构的角度来看更好吗?

var tolerance = Constants.DateTypeGeneratorTolerance; 

var dayType = DateTypeGenerator.GenerateDateType(
       courseTripValidity, 
       tolerance, 
       symbols, 
       startDate, 
       endDate); 

2.

var dayType = DateTypeGenerator.GenerateDateType(
       courseTripValidity, 
       Constants.DateTypeGeneratorTolerance, 
       symbols, 
       startDate, 
       endDate); 
+3

这个问题没有一个唯一正确的答案,因此它可以被封闭,过于主观的(但是这是非常值得,我更喜欢版本与本地变量)。 –

+0

我与@ChrisTaylor –

+0

我想删除变量...我在开玩笑。至少最初的开发者认为可读性在我看来是一个加号 –

回答

1

没有明确的答案,但我个人更喜欢后者的版本。恕我直言,Constants.DateTypeGeneratorTolerance并不是无法忍受的长(尽管离那不太远)。如果它的名字选择得当,它就会精确地说明它的含义。尽管引入一个局部变量使得空间变得凌乱,并且使我更加难以理解正在发生的事情 - 不仅在直接阅读代码时,而且寻找这个常量的用法也更加麻烦。

此外,名称本身很长,主要是因为它包含范围信息。通过将所有全局常量放入一个类中,您需要使用命名前缀(如DateTypeGenerator)区分它们。而如果您将常数移到逻辑上属于的位置 - 无论是DateTypeGenerator本身,还是单独的DateTypeGeneratorConstants类 - 常量名称本身都会变得简短。

请注意,几种语言提供了特殊功能来减少对限定符的需求,从而缩短了名称。比如Java中的静态导入,或者C#中的using指令。

结合上述与C#using指令你:

using Tolerance = DateTypeGenerator.Tolerance; 

... 

DateType dayType = DateTypeGenerator.GenerateDateType(
       courseTripValidity, 
       Tolerance, 
       symbols, 
       startDate, 
       endDate); 
+0

+1我也不喜欢使用局部变量。 –