17

您应该在代码库中将旧代码注释掉多长时间?承包商通过将旧代码转换为注释来继续将旧代码保留在代码库中。这真的很令人沮丧,我希望他们只删除旧代码而不是将其注释掉。

是否有正当理由将代码库中的旧代码作为注释保留?我正在使用 Visual Sourcesafe 的版本控制

4

14 回答 14

50

如果您使用 SVN 或 CVS 之类的东西,则不会。我会在视线范围内抹去它们。它们使代码的可读性降低。

应该有注释来帮助正在阅读代码、解释内容等的程序员。

于 2009-06-20T21:08:35.487 回答
14

我能想到的一个正当理由是这个(虚构的)例子:

# removed the following test because this should work now that bug #12345 is fixed.
#assert a != 0
b = number / a

基本上,是为了防止其他开发人员重新插入由于某种原因而被删除的代码。

于 2009-06-20T21:12:53.120 回答
10

告诉承包商停止这样做。这是一种可怕的做法。

没有任何理由将旧代码保留在代码库中。它只是碍事。您的版本控制系统将向您显示每个文件的历史记录。

保留旧代码的唯一可能好的理由可能是用于历史参考(也许如果旧代码做了一些可能与当前情况相关的特别奇怪的事情)。

有时我会注释掉代码,因为我知道我正在进行临时更改(临时我的意思是少于几天),并且肯定打算回到它。

编辑:另一种相关做法是将更改的名称和日期放入文件中:

// 06/20/2009 - joe changed this #1245

也不要这样做。在当时,查看谁进行了更改似乎很有价值,但随着时间的推移,它确实没有任何价值,而且还会使代码变得混乱。

于 2009-06-20T21:12:08.053 回答
4

如果您正在使用您应该使用的源代码控制,则删除旧代码,因为副本将在源代码控制中准备好并等待您,如果您需要将其添加回来。将旧代码放在那里会降低阅读上述代码的能力并引入混乱。此外,如果您使用承包商编写代码,请告诉他们如何在您支付工资时编写代码。为他们定义编码标准并让他们有意识地编码,这应该改进方法、属性等的名称,并一起减少对注释的需求。

于 2009-06-20T21:24:26.793 回答
4

你问“多久?” 如果这些地方是人们仍在工作的热点,我不会因为在一两个地方有旧代码而感到生气。

也许他们对新代码还没有信心。新代码“完成”了吗?是按应该写的吗?它通过测试吗?是否根据规范进行了评论和记录?表现在它应该在的地方吗?(我能想到同时拥有旧代码和新代码的最佳原因是当我在计时或分析一组特定案例时。)

旧代码有什么比新代码更可取的吗?

承包商是否感到匆忙?或者这只是版本控制前的旧习惯?

于 2009-06-20T21:57:02.533 回答
3

当您提醒承包商时,他们不必注释掉代码,因为 Sourcesafe 会保留历史,询问他们为什么这样做。

可能是出于某种原因他们不信任它。如果你能从他们那里得到这个原因,他们可能会注意。我知道当我们多年前从 VSS 迁移时,是因为他们可能也遇到了可靠性和可扩展性问题。如果您可以解决他们的担忧,或者通过证明 VSS 足以满足您的需求,或者说您将调查其他源代码控制解决方案(当然,如果您有预算),您应该赢得他们的支持。

说服胜于强迫。

于 2009-06-20T21:42:40.113 回答
2

是的,一见钟情。除了表明评论它的开发人员不确定是否要删除它之外,它没有任何价值。或者他们不知道如何使用您的源代码控制软件。

于 2009-06-20T21:10:49.333 回答
2

基本上,您只有 2 个选项。

  1. 删除它 - 那是当您使用一些代码存储库时。您的存储库将准确地告诉您进行了哪些更改,因此无需在您的工作代码中保留很长的旧注释,这不会用简单的语言解释某些内容。
  2. 另一方面,如果您出于多种原因希望保留该代码,例如,我将应用程序中的一些浮点计算代码注释掉,因为它不能在我正在编程的平台上工作。但由于我不希望我的应用程序仅限于该平台,因此我将代码保留在那里,因此当我将应用程序移植到支持浮点计算的平台时,它可以节省工作量。这只是保留旧代码的原因之一,可能适用于相同背景的人。

否则,上面提到的是您仅有的 2 个选择。你的来电!!

于 2009-06-20T21:19:25.243 回答
1

保留旧代码只会使阅读整个代码变得更加困难。只要项目有某种形式的版本控制,注释掉的代码就应该被删除。如果您没有修订控制并且无法进行任何设置,那么建议将旧代码放在不属于代码库一部分的文件中。

于 2009-06-20T21:43:49.313 回答
1

我假设您指的是似乎具有一定价值的重要代码块,或者本身就是好的算法,而不仅仅是这里或那里的奇数行。

在这些情况下,如果您进行了较大的更改,保留旧代码作为代码审查的一种形式,就会有保留代码的自然趋势。任何获得最新版本的人都将能够立即看到所做的重大更改,如果出现问题,更容易看到以前的内容。如果问题出在新代码上,那么有一种非常简单的方法可以立即检查它。

因此,鉴于此,我倾向于注释掉第一次修订的旧代码,然后仅在随后再次更改代码时将其删除,此时更改将被“嵌入”并且不太可能成为错误。

这些注释是一种文档形式,对于任何纯粹的“干净”编码理想,无需删除它们。当它们不再需要时将它们移除,在它们可能有价值时保留它们。

于 2009-06-20T21:46:26.173 回答
0

首先,我说摆脱它。

但我知道一个不这样做的原因:虽然它仍然存在于您的版本控制中,但这并不意味着任何人都可以看到它。如果您可能需要再次看到它,您首先必须知道它曾经存在过。有时你做了一个修改,未来的开发者需要同时看到旧的和新的方式,如果你删除了旧的方式,开发者怎么知道它曾经存在?大多数人没有足够好地记录版本控制中的更改以解决此类问题。

于 2009-06-20T22:03:54.920 回答
-1

将旧代码留在那里的原因有很多。基本上 - 一旦它被删除,它实际上就消失了 - 除非有人真的记得它在那里。

作为一个邪恶的承包商,我不会删除代码,除非我对程序进行大量重写——废弃它并替换它而不是“修复”它。

于 2010-09-20T21:28:10.853 回答
-1

我目前正在介绍的项目使用另一种方法 - 某种妥协......当您决定不再使用某些代码时,您只需将其注释掉,写下注释日期,并且(如果可能 - 例如在 Netbeans 或 VisualStudio 中)您将旧代码插入#region OLD_IMPL。影响?- 你仍然有一个旧代码以防万一 - 未使用的代码块正好占用 1 行 (#region OLD_IMPL) - 如果你看到,该代码没有使用一年(你有注释掉它的日期),你可以简单地删除它。

在任何危急情况下,您总是使用 SVN ;)

于 2013-04-25T11:49:12.140 回答
-2

那些因为版本控制工具可以解决您可能遇到的任何问题而说摆脱注释代码的人是白痴。

你需要摆脱过时的代码,一旦你确定它真的真的过时了。

曾经因为“它并不完全糟糕,但可惜它也不完全好”而不得不修改修改?如果您仍然可以取出生产源并且知道之前版本的代码仍然在其中,以某种文本形式,它将为您节省大量时间,因为您无需求助于复杂、难以-控制,因此使用版本控制工具可能为您提供的任何“部分源合并”和“部分源合并”的过程非常容易出错。

不喜欢这种现实的人肯定在他们的整个职业生涯中都只编写了从未“不完全坏,但也不完全好”的代码,或者换句话说,只产生了要么完全坏要么完全完美的代码. 我们都知道实现后者的可能性有多大。

于 2009-06-20T22:35:24.343 回答