在C#中,我使用#warning
和#error
指令
#warning This is dirty code...
#error Fix this before everything explodes!
这样,编译器会让我知道我还有工作要做。您使用什么技术来标记代码,这样您就不会忘记它?
答案 0 :(得分:81)
使用// TODO
,// HACK
或其他注释令牌标记它们,这些注释令牌将显示在Visual Studio的任务窗格中。
答案 1 :(得分:26)
Todo评论也是如此。
我们还添加了一个特殊的关键字NOCHECKIN,我们在我们的源代码控制系统中添加了一个commit-hook(很容易用至少cvs或svn),它扫描所有文件并拒绝签入文件如果它在任何地方找到NOCHECKIN文本。
如果您只是想测试一些内容并确保它不会被意外检入(在提交源代码控制的所有内容的差异期间通过注意的眼睛),这非常有用。
答案 2 :(得分:14)
我在我的方法中使用//TODO:
//HACK:
和throw new NotImplementedException();
的组合来表示尚未完成的工作。另外,我在Visual Studio中添加不完整的书签。
答案 3 :(得分:10)
// TODO:人名 - 请解决此问题。
这是在Java中,您可以查看Eclipse中的任务,它将找到对此标记的所有引用,并可以按人分组,以便您可以将TODO分配给其他人,或者只查看您自己的。 / p>
答案 4 :(得分:6)
如果我必须在变更过程中丢弃所有内容,那么
#error finish this
如果这是我以后应该做的事情,它会进入我的bug追踪器(用于所有任务)。
答案 5 :(得分:6)
'做''评论在理论上是伟大的,但在实践中并不是那么好,至少在我的经验中。如果你要被拉开足够长的时间以便需要它们,那么它们往往会被遗忘。
我赞成Jon T的一般策略,但我通常只是暂时破解代码 - 我经常插入一个故意未定义的方法引用,让编译器提醒我需要回到的地方:
PutTheUpdateCodeHere();
答案 6 :(得分:5)
在禁用状态下添加测试。它们出现在所有构建报告中。
如果这不起作用,我会提交错误。
特别是,我没有看到TODO的评论以任何有意义的方式减少数量。如果我在撰写评论时没有时间去做,我不知道为什么我以后会有时间。
答案 7 :(得分:5)
我非常喜欢的方法是“黑客爆炸”,正如Oren Eini here所示。
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;
}
答案 8 :(得分:4)
//TODO: Finish this
如果你使用VS,你可以在工具>选项>环境>任务列表
下设置自己的任务标签答案 9 :(得分:3)
gvim以黄色突出显示“// XXX”和“// TODO”,这让我第一次在标记某些代码时提醒自己回过头来感到惊讶。
答案 10 :(得分:2)
我使用// TODO:或// HACK:提醒一些事情未完成,并附有解释原因的说明。 由于时间的限制,我经常(很少读)回去完成那些事情。 但是,当我查看代码时,我会记录未完成的内容,更重要的是为什么。
我在一天或一周结束时经常使用的另一条评论:
//从这里开始CHRIS
^^^^^^^^^^^^^^^^^^^^ 告诉我我离开的地方所以我可以在周一早上最小化我的自助时间。
答案 11 :(得分:2)
这不是一个完美的世界,我们并不总是有无限的时间来重构或思考代码。
我有时会在代码中添加//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
答案 12 :(得分:1)
Todo评论。
答案 13 :(得分:1)
我是一名C ++程序员,但我想我的技术很容易用C#或任何其他语言实现:
我有一个ToDo(msg)
宏,它扩展为在本地范围内构造静态对象,其构造函数输出一条日志消息。这样,第一次执行未完成的代码时,我在日志输出中收到提醒,告诉我我不能再推迟任务。
看起来像这样:
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");
}
答案 14 :(得分:1)
如果它是某些long term technical debt,您可以评论如下:
// 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会做到这一点,只要你不是简单地忽略它们。
答案 15 :(得分:1)
这些是我发现有助于标记需要解决的问题的三种不同方式。
在需要查看的代码旁边放置一条评论标记。大多数编译器可以识别常见标志并以有组织的方式显示它们。通常,您的IDE具有专门为这些标志设计的监视窗口。最常见的评论标志是:// TODO您将如何使用它:
// TODO:在发布之前解决此问题。这会导致访问冲突,因为它正在使用尚未创建的内存。
在发布之前标记需要解决的问题的一种方法是创建无用的变量。如果您有一个未使用的变量,大多数编译器会发出警告。以下是您可以使用此技术的方法:
int This_Is_An_Access_Violation = 0;
IDE书签。大多数产品都会提供一种方法,在您的代码中放置书签以供将来参考。这是一个好主意,除了它只能由你看到。当您共享代码时,大多数IDE都不会共享您的书签。您可以查看IDE的帮助文件系统,了解如何使用它的书签功能。
答案 16 :(得分:1)
我使用// FIXME:xxx表示损坏的代码,// CHGME:xxx表示需要注意但有效的代码(可能只在有限的上下文中)。
答案 17 :(得分:1)
// TODO: <explanation>
如果这是我没有实现的东西,并且不想忘记。
// FIXME: <explanation>
如果这是我认为不合适的东西,并希望稍后回来或让其他人看一眼。
从未想过#error /#警告选项。这些也可以派上用场。
答案 18 :(得分:0)
我也使用TODO:评论。我理解他们很少得到修复的批评,并且他们最好报告为错误。但是,我认为错过了几点:
在重度开发期间,当我不断地重构和重新设计时,我最常使用它们。所以我一直在看他们。在这种情况下,他们中的大多数确实得到了解决。此外,您可以轻松搜索TODO:确保我没有错过任何内容。
对于阅读代码的人来说,了解您认为写得不好或被黑客攻击的地点非常有帮助。如果我正在阅读不熟悉的代码,我倾向于寻找组织模式,命名约定,一致的逻辑等。如果为了权宜之计必须违反一次或两次一致性,我宁愿看到这样的注释。这样我就不会浪费时间去寻找没有的逻辑。
答案 19 :(得分:0)
正如大多数程序员似乎在这里所做的那样,我使用了TODO评论。另外,我使用Eclipse的任务接口Mylyn。当任务处于活动状态时,Mylyn会记住我打开的所有资源。这样我就可以跟踪
答案 20 :(得分:0)
除了键出“TODO:”评论之外,许多IDE还关注“TASK:”评论。有些IDE甚至允许您配置自己的特殊标识符。
答案 21 :(得分:0)
这是我使用的临时评论标签列表:
//+TODO Usual meaning.
//+H Where I was working last time.
//+T Temporary/test code.
//+B Bug.
//+P Performance issue.
表示不同的优先级,例如://+B vs //+B+++
优势:
//+
)。//+B
以查找所有错误,搜索//+B+++
仅获得高优先级的错误。可以与C ++,C#,Java,...一起使用
为什么使用//+
表示法?因为对于{em>临时,+
符号看起来有点像t
。
注意:这不是标准建议,只是个人建议。
答案 22 :(得分:0)
在代码库中散布无用的TODO可能不是一个好主意,尤其是随着时间的推移您有多个贡献者时。这会使新来的人感到困惑。但是,在我看来,在实践中行之有效的是陈述作者以及TODO的编写时间,标头(最多50个字符)和更长的正文。
无论您将什么放入TODO注释中,我都建议您系统地跟踪它们。例如,有一项服务可根据git blame
(http://www.tickgit.com)检查存储库中的TODO注释。
我开发了自己的命令行工具,以使用此处的答案(https://github.com/mristin/opinionated-csharp-todos)的想法来强制执行TODO注释的一致样式。将它集成到持续集成中相当容易,因此每次向主服务器推送时都会重新生成任务列表。
在与其他人的会议中讨论TODO时,想要通过电子邮件 etc 共享任务表时,也可以将任务列表与IDE分开。
>