干净的代码和重构。额外的本地变量

3
在我们的团队中,我们就一小段代码进行了大量讨论。 示例1:开发人员添加了额外的本地变量以使代码更易读。在本地变量中,他保存了来自常量的值。 示例2:相同的代码没有额外的变量,但从我们开发人员的角度来看不太易读。
你认为哪种更易读?从重构的角度来看哪种更好呢? 1.
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
这个问题没有一个唯一正确的答案,因此可能会被关闭,因为它过于主观 (但值得一提的是,我更喜欢使用本地变量的版本)。 - Chris Taylor
我会移除变量...开玩笑的。至少原始开发者考虑了可读性,这在我的看法中是一个加分项。 - Chris S
在这种无关紧要的事情上进行大争论是相当不健康的。现在你们都去站成一个圆圈,手拉手唱起《康巴啊亚》吧。 - Hans Passant
1个回答

1

这个问题没有明确的答案,但我个人更喜欢后者。在我看来,Constants.DateTypeGeneratorTolerance 并不是非常长(虽然也离极限不远)。如果它的名称选择得当,它可以准确地表达其含义。而引入一个局部变量会使空间混乱,并且让我更难以理解正在发生的事情 - 不仅在直接阅读代码时如此,而且在搜索此常量的用法时也更加繁琐。

此外,名称本身之所以很长,主要是因为它包含作用域信息。将所有全局常量放入单个类中,您需要使用命名前缀(例如 DateTypeGenerator)来区分它们。而如果您将常量移动到逻辑上属于它的位置 - 要么是 DateTypeGenerator 本身,要么是单独的 DateTypeGeneratorConstants 类 - 常量名称本身将变得简短而简洁。

请注意,一些语言提供特殊功能以减少限定符的需求,从而缩短名称。例如 Java 中的静态导入或 C# 中的 using 指令。

结合上述内容和 C# 的 using 指令,您将获得:

using Tolerance = DateTypeGenerator.Tolerance;

...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接