Hacker News 中文摘要

RSS订阅

待办事项并非为了执行 -- TODOs Aren't for Doing

文章摘要

TODO注释的价值不在于必须完成,而在于记录代码中的潜在问题或改进建议。它们为未来开发者提供了上下文,帮助理解代码的意图和未处理的边缘情况。不必强制将每个TODO都纳入任务追踪系统或删除长期未处理的TODO,合理使用TODO可以为代码维护提供有价值的参考。

文章总结

TODO注释的真正价值

一些团队要求将代码库中的每个TODO注释都记录在问题跟踪系统中,而另一些团队则会自动删除在代码库中存在超过一年的“陈旧”TODO注释。然而,这种做法并不总是必要的。

TODO注释的价值并不在于它们是否被完成。例如,如果你看到这样的注释:

// TODO: 编写文件的后半部分,以确保下周的发布不会崩溃

那么,你确实应该将其记录在某个地方进行跟踪。

但在我看来,一个好的TODO注释更像是这样的:

// TODO: 如果用户三次点击此按钮,点击处理程序会因[xyz]而出错

这可能是待办事项列表中最优先的事项吗?很可能不是。大多数用户不会三次点击那个按钮。但// TODO:并不一定是一个实际执行某项任务的计划。相反,它更像是一个关于“这里有一个未被处理的边缘情况”的笔记,或者是作者没有时间实现的更好结构的建议——它捕捉了作者当时的一小部分思考,并为读者提供了一个了解代码编写时丰富背景的小窗口。

有时TODO注释是有用的,有时则不然,但恰到好处的TODO注释往往能回答未来读者的疑问:“我是不是完全忽略了什么,或者这段代码是不是应该这样重构?”——并且回答得足够好,让读者能够克服“嗯,也许我还是保持原样吧,以防原作者知道一些我不知道的事情”的犹豫。

评论总结

评论主要围绕代码中的TODO注释的使用和意义展开,观点分为支持和反对两派。

支持TODO的观点: 1. 记录未完成的任务或潜在问题TODO可以作为一种快速记录未完成任务或潜在问题的方式,帮助开发者在未来处理这些问题。 - "At least inline TODOs are captured somewhere. And they can be for doing." (mcntsh) - "TODOs are something less solid than a FIXME and are also just about getting it out of your head so you can devote more mental energy to something else or just relax." (allthedatas)

  1. 提供上下文信息TODO可以为未来的开发者提供代码编写时的上下文信息,帮助他们理解代码的潜在问题或改进方向。
    • "It captures a little slice of the author’s brain and gives a little window into the rich context they had at the time they wrote the code." (CivBase)
    • "They capture information you have when writing the code that communicates something useful about it." (gblargg)

反对TODO的观点: 1. TODO不应被滥用:如果TODO并不指向具体的任务,而只是记录一些已知问题或建议,那么它应该被替换为普通的注释或NOTE。 - "If it's not intended to be done, then you are using the wrong name. Don't call it TODO." (malkosta) - "Sounds to me like this should just be a regular comment. Don't add 'TODO' if you're not actually going TO DO it." (CivBase)

  1. TODO可能导致任务被忽视TODO往往会被忽视,尤其是在大型项目中,它们可能永远不会被处理,反而增加了代码的复杂性。
    • "I have never seen TODOs being cleaned up in enterprise environment. Therefore our team would not approve PR with TODOs: either fix them yourself or open a separate ticket for it." (ivanjermakov)
    • "This is just going to lead to things not being done as nobody knows whether or not the TODO is resolved or not." (rglover)

其他建议: 1. 使用分层注释系统:一些开发者建议使用分层注释系统,如FIXMEXXXNOTE等,以区分不同优先级和类型的注释。 - "I add and grep for the following: FIXME, XXX, TODO, NOTE." (pisipisipisi) - "I have three levels: An issue tracker, TODOs, XXXs." (titzer)

  1. 结合问题跟踪系统:将TODO与问题跟踪系统结合,确保每个TODO都有对应的任务记录,避免任务被遗忘。
    • "// TODO(): . This format allow for quickly finding the place where the thing needs to be done, while keeping track of the issue in the issue tracker." (baalimago)

总结:TODO注释在代码中具有一定的价值,但应谨慎使用,避免滥用。开发者应根据具体情况选择合适的注释方式,并结合问题跟踪系统确保任务得到处理。