你如何标记代码,以便以后可以回来并进行处理?
在C#中我使用#warning
和#error
指令,
#warning This is dirty code... #error Fix this before everything explodes!
这样,编译器会让我知道我还有工作要做。 你用什么技术来标记代码,所以你不会忘记它?
将它们标记为// TODO
, // HACK
或其他注释标记,这些标记将显示在Visual Studio的任务窗格中。
请参阅使用任务列表 。
Todo评论也是如此。
我们还添加了一个特殊的关键字NOCHECKIN,我们在源代码pipe理系统中增加了一个提交钩子(至less用cvs或svn很容易做到),它扫描所有的文件并拒绝检查文件任何地方的文本NOCHECKIN。
这是非常有用的,如果你只是想testing一些东西,并确保它不会意外地被检入(在所有的源代码控制的差异期间通过监视的眼睛)。
我使用//TODO:
//HACK:
的组合//HACK:
并throw new NotImplementedException();
在我的方法来表示没有完成的工作。 另外,我在Visual Studio中添加了不完整的书签。
// TODO:人名 – 请解决这个问题。
这是用Java编写的,然后你可以在Eclipse中查看任何可以find这个标签的所有引用的任务,并且可以按照个人的方式对它们进行分组,这样你就可以把TODO分配给别人,或者只是看看你自己的。
“做”的评论在理论上是伟大的,但在实践中并不那么好,至less在我的经验中。 如果你将被拖走足够长的时间需要他们,那么他们往往被忘记。
我赞成Jon T的一般策略,但是我通常只是简单地通过简单地破坏代码来做到这一点 – 我经常插入一个有意识的未定义的方法引用,让编译器提醒我需要回到什么地方:
PutTheUpdateCodeHere();
如果我必须放下一切,那么
#error finish this
如果这是我以后应该做的事情,它会进入我的bug跟踪器(用于所有任务)。
在禁用状态下添加testing。 他们出现在所有的构build报告。
如果这不起作用,我提出一个错误。
尤其是,我还没有看到TODO的评论数量有任何有意义的下降。 如果我在写评论的时候没有时间去做,我不知道为什么我会晚点。
我真正喜欢的方法是“黑客炸弹”,正如Oren Eini 在这里所展示的那样。
try { //do stuff return true; } catch // no idea how to prevent an exception here at the moment, this make it work for now... { if (DateTime.Today > new DateTime(2007, 2, 7)) throw new InvalidOperationException("fix me already!! no catching exceptions like this!"); return false; }
//TODO: Finish this
如果您使用VS,您可以在工具>选项>环境>任务列表下设置您自己的任务标签
gvim用黄色突出显示了“// XXX”和“// TODO”,这让我非常惊讶,因为我第一次用一些代码来提醒自己回来。
我用// TODO:或者// HACK:提示有些东西是未完成的,有一个注释来解释为什么。 我经常(很less读)回去完成这些事情,由于时间限制。 但是,当我查看代码时,我logging了什么是未完成的,更重要的是为什么。
我经常在一天或一周结束时再多加一点评论:
//从这里开始CHRIS
^^^^^^^^^^^^^^^^^^^^告诉我我离开的地方,这样我就可以在周一早上把自举时间缩短了。
这不是一个完美的世界,我们并不总是有无限的时间来重构或思考代码。
有时我会在代码中join//REVIEW
,如果这是我以后想回来的事情。 即代码正在工作,但可能不相信这是最好的方法。
// REVIEW - RP - Is this the best way to achieve x? Could we use algorithm y?
//REFACTOR
// REFACTOR - should pull this method up and remove near-dupe code in XYZ.cs
Todo评论。
// TODO: <explanation>
如果这是我没有执行的东西,也不想忘记。
// FIXME: <explanation>
如果这是我认为不正确的东西,并且想要稍后回来或者有其他的眼睛看。
从来没有想过的#错误/#警告选项。 那些也可以派上用场。
我使用// FIXME:xxx作为破损的代码,// CHGME:xxx作为需要注意但是起作用的代码(可能只在有限的情况下)。
这些是我发现的三种不同的方式来标记需要解决的问题。
-
在需要查看的代码旁边放置注释标记。 大多数编译器可以识别普通标志并以有组织的方式显示它们。 通常你的IDE有一个专门为这些标志devise的监视窗口。 最常见的评论标志是:// TODO你将如何使用它:
// TODO:在释放之前解决这个问题。 这会导致访问冲突,因为它正在使用尚未创build的内存。
-
一种标记需要在发布之前解决的问题的方法是创build一个无用的variables。 大多数编译器会警告你,如果你有一个不使用的variables。 这里是你如何使用这种技术:
int This_Is_An_Access_Violation = 0;
-
IDE书签。 大多数产品都会附带一个在代码中放置书签的方式,供将来参考。 这是一个好主意,除了它只能被你看到。 当你分享你的代码时,大多数IDE将不会共享你的书签。 您可以检查IDE的帮助文件系统,了解如何使用书签function。
如果这是一些长期的技术债务 ,你可以评论如下:
// TODO: This code loan causes an annual interest rate of 7.5% developer/hour. Upfront fee as stated by the current implementation. This contract is subject of prior authorization from the DCB (Developer's Code Bank), and tariff may change without warning.
… 呃。 我想TODO会做到这一点,只要你不要忽略它们。
我是一名C ++程序员,但是我想我的技术可以用C#或任何其他语言轻松实现:
我有一个ToDo(msg)
macros,扩展到在构造函数输出日志消息的本地范围构造一个静态对象。 这样,我第一次执行未完成的代码,我在我的日志输出中得到一个提醒,告诉我,我可以推迟任务不再。
它看起来像这样:
class ToDo_helper { public: ToDo_helper(const std::string& msg, const char* file, int line) { std::string header(79, '*'); Log(LOG_WARNING) << header << '\n' << " TO DO:\n" << " Task: " << msg << '\n' << " File: " << file << '\n' << " Line: " << line << '\n' << header; } }; #define TODO_HELPER_2(X, file, line) \ static Error::ToDo_helper tdh##line(X, file, line) #define TODO_HELPER_1(X, file, line) TODO_HELPER_2(X, file, line) #define ToDo(X) TODO_HELPER_1(X, __FILE__, __LINE__)
…你用这样的:
void some_unfinished_business() { ToDo("Take care of unfinished business"); }
我也使用TODO:评论。 我了解他们很less得到修正的批评意见,而且他们最好能报告为错误。 不过,我认为这个想法有几点:
-
当我经常重构和重新devise事物时,我在大量开发中使用它们。 所以我一直在看着他们。 在这样的情况下,他们中的大多数确实得到解决。 另外,searchTODO很容易:确保我没有错过任何东西。
-
对于阅读你的代码的人来说,这可能是非常有帮助的,要知道你认为写得不好的地方或黑客入侵的地方。 如果我正在阅读不熟悉的代码,我倾向于寻找组织模式,命名约定,一致的逻辑等等。如果为了方便而必须违反一致或两次的一致性,我宁愿看到这样的说明。 这样,我不浪费时间试图find没有逻辑的地方。
正如大多数程序员似乎在这里做的,我使用TODO的评论。 另外,我使用Eclipse的任务界面Mylyn 。 当任务处于活动状态时,Mylyn会记住我打开的所有资源。 这样我可以跟踪
- 在一个文件中,我必须做些什么(和什么),
- 在哪些文件我必须做,和
- 他们与什么任务有关。
除了closures“TODO:”评论之外,许多IDE也closures了“TASK:”评论。 有些IDE甚至可以configuration自己的特殊标识符。