未使用代码的最佳实践

16
我想了解人们在移除未使用代码方面的最佳实践。个人而言,我喜欢删除(而不仅是注释掉)任何当前未使用的内容。但我不确定该如何做到最好。
以这个项目为例(虽然我对一般讨论感兴趣)。在我的项目中,我有十几个用户控件。为了一个后来取消的功能,我在其中一个用户控件上实现了一些方法和属性。额外的代码不是特定于该功能的,但需要支持它。它可能以后会有用。
- 我应该删除这段代码吗,因为目前我们没有使用它,而且代码越少越容易阅读?问题在于,未来的开发人员如何知道这项工作已经完成? - 还是我应该保留它,这样另一个开发人员如果以后需要使用它,就可以轻松找到它(他们不会想到通过源代码控制来查看是否有人已经执行了此操作并将其删除)? - 还有其他选择吗?
同样适用于当前未使用的用户控件。我应该删除它们还是保留它们?
编辑:当然(或者我认为),我们正在使用源代码控制。
9个回答

43

首先要记住的是你所有的代码都应该在源代码控制中

有了这个想法,当然你想删除过时的代码而不仅仅是注释它。无论代码块多长,注释的代码块都是危险的,至少有两个原因:

  1. 人们倾向于假设注释已经与其他代码一起维护。这并不是真的,会导致像 bug 回归等问题。
  2. 很容易错过长块中未注释的闭合大括号(例如)。

如果你真的需要,已删除的代码仍然可用,但不再混乱你的工作副本。如果你真的关心旧代码的可发现性,你可以留下一个注释,指示代码被移除和你需要找到的修订版本号。在一行上,这比实际代码块使用的要好得多。这也更清楚地表明了这段代码已经过时,并且已经过了多长时间。


建议添加一个 #3:未使用的代码不太可能被很好地测试,并且理论上可能会引入错误和/或安全漏洞。 - JohnFx
这归于“维护”范畴,所以基本上和理由1差不多。 - Joel Coehoorn
我也发现,被注释的代码块会在你浏览时吸引你的注意力,而你不希望被死代码分散注意力。 - Mr Plough
1
我不得不承认,这是一个真正好的答案,很可能比我能想到的任何东西都要好,在我的情况下,我想,我可能只会把它留在那里,没有注释。 - Martin
我认为真正让我下定决心的那一点是我之前没有考虑到的,那就是代码没有经过测试,未来的用户可能不会意识到这一点。 - Ray
喜欢这个想法,可以删除它们并留下评论,引用修订号。谢谢! - Chen Ni

5
如果您正在使用源代码控制系统,删除代码是我的首选选项。这不会影响您与当前代码的工作,并且如果您将来需要它,您始终可以在存储库中找到该代码。

“既然你正在使用源代码控制系统,删除代码是我首选的选项。”--这样就为您解决了。 - Instantsoup

5
一段代码可以有两种状态。
一种是活跃的、功能齐备并经过测试,这时应该放在源代码控制中。
另一种是已经过时,你无法想象还有人会想要使用它,因为它已经过时了。这种情况下应该将其删除。

不要因为“其他开发人员可以轻松找到它”而不删除代码,保持代码活跃和编译也是完全可以的。不用担心库的大小,链接器会删除任何未被使用的内容。

如果你要删除代码并想警告其他人删除了哪些代码以及删除的原因,可以放置一个良好的注释。


3
我的猜测是,即使你评论说它在存储库中,也会重新编写它,而不是有人回去取回它。虽然我没有在许多地方工作过这种“不留代码”的政策(只有一个),但我从来没有见过有人回到存储库并获取一些旧代码。
然而,除了小块之外,我从来没有看到任何人取消注释别人的代码!
如果您想保存它,我会将其完全实现和测试(检查测试!),但在新代码需要时更改条件。
当不需要代码时,我曾经将其“打开”,这是一种非常好的感觉(并非总是可以做到)。
如果您无法打扰将其完全功能化和测试,则将其剪切,让下一个人重新编写它。

2
我也喜欢删除未使用的代码。如果我知道这段代码以后可能有用,我会在从主干上删除代码之前创建一个分支(我们正在使用Subversion,所以创建分支非常便宜和容易)。这使得我可以轻松地获取需要的代码。
例如,如果您有一个新功能,但该功能将不会在发布时完成,此过程允许从主干中删除部分功能,但您仍然可以在完成后添加回来。

2

通常我会让死代码闲置一段时间,直到它的用途稳定下来并且我不再使用该功能。在那时,我会将其删除。


1
我建议用注释替换已删除的代码,并指定删除代码所对应的工作项。我的理由是这提供了一个“钩子”,可以将任何代码审查评论附加到其上。我们使用TFS更改集进行VS专业版的代码审查。如果代码被完全删除,则没有钩子可用。

1
我们的源代码树中有一个“Obsolete”区域,我们将不再使用的东西移动到该区域。它位于主干之外的一个区域,通常不会被检出,因此没有人需要查看它。

你好!“Obsolete”区域是什么意思? - alvaro nortes
@alvaronortes 创建一个名为“Obsolete”的文件夹,将旧代码移动到该文件夹中,以便在主要构建过程中不再显示。 - Jason DeFontes

0

作为一个有强迫症的人,我有以下偏好:

  • 代码应该放在源代码控制中,通过使用PR,即使我们删除了分支,代码仍然可以随时访问,并且可以使用git历史记录。
  • 遵循“不留代码落后”的政策,似乎很少有人检索旧代码,甚至在没有经过测试和重写的情况下使用它。
  • 请考虑一下继承代码进行维护和开发的下一位可怜的开发人员,他们将对哪些部分正在使用或未使用感到困惑,并且还必须查看所有被注释的代码,除了他们的日常任务。
  • 我们可以为正在使用的代码使用正确的属性,但对于未使用的代码,我们应该删除它而不是将其注释掉,不过这个时间段应该很短。

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