【问题标题】:Clean code and refactoring. Extra local variable干净的代码和重构。额外的局部变量
【发布时间】:2012-06-22 12:13:47
【问题描述】:

我们在团队中就代码的小和平进行了大讨论。

示例 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);

【问题讨论】:

  • 这个问题没有一个正确答案,所以它可能会因为过于主观而被关闭(但对于它的价值,我更喜欢带有局部变量的版本)。
  • 我会删除变量...我在开玩笑。至少最初的开发者认为可读性在我看来是一个优点
  • 对这样无关紧要的事情争论不休是非常不健康的。大家现在围成一圈,手拉手唱Kumbaya。

标签: .net coding-style refactoring


【解决方案1】:

对此没有明确的答案,但我个人更喜欢后一个版本。恕我直言Constants.DateTypeGeneratorTolerance 不是太长了(虽然也不是很远)。如果它的名字选得好,它就准确地说明了它的含义。而引入局部变量会使空间变得混乱,让我更难以理解正在发生的事情 - 不仅在直接阅读代码时,而且搜索该常量的用法也更加麻烦。

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

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

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

using Tolerance = DateTypeGenerator.Tolerance;

...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2022-01-22
    • 2016-08-23
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多