什么时候应该避免写代码注释?

 看到标题,我知道你可能会想:“我为什么要避免代码注释,这难道不是一件好事吗?”。是的,写注释在大多数情况下是有用的。但是,请注意,我说的是“在大多数情况下”,因为有一些情况下,你不应该写注释。

  还不相信?那让我告诉你:写注释有时会坏事!会导致坏代码!

  请允许我用一句名言来开始我的论证:

不要注释坏代码——重写吧。——Brian W. Kernighan and P. J. Plaugher

  这句话给我流下了非常深刻的印象。仔细想一想,有多少次你注释你的代码,只是因为担心自己将来再回过头来阅读的时候可能会不理解它的意思?至少都做过一次吧。坦率地说,我有很多次是因为这个原因才注释的,尤其是在那些我还是重构和编写干净代码的新手的日子里。

  那么,为什么这样的注释反而不好呢?简而言之是因为,我们会因为有注释而放任编写坏的代码!正如你所看到的,注释有时候反而激励了我们去写一些不整洁的代码。

  另一个原因是因为注释会误导我们。有多少次你已经改变了代码,却忘了改旁边的注释?别否认,这种事时常发生。这就是为什么你经常听到这样一句话,“真理只存在于代码中”。

  那么,什么时候你不应该写注释呢?

  有一个经验法则就是,无论何时你发现自己要使用注释来解释这段代码是用来干什么的时候,那么基本上就是你的代码需要重构以变得更整洁的时候。

  典型的解决方案

  现在你知道为什么有时候反而要避免写注释了,那么有什么解决办法吗。事实上,目前还没有一个有效的解决方案,但是你可以清洁你的代码,这样你(以及其他人)就可以在没有注释的情况下也能理解它了。

  为了用可读的代码替换掉注释,通常我们的典型解决方法是使用提取方法重构(Extract Method refactoring)。这种重构方式是我最喜欢的。对此我也写过一篇博客,里面有完整的例子:《Break Your Method Into Smaller Ones》。

  下面让我们看一个简单说明如何提高你的代码,从而解放注释的例子。

1 <?php
2 // Check to see if the customer can get free product
3 if ($customer->isPremium () and $customer->numberOfPurchases > 8) {
4 }
5 // OR
6 if ($customer->canGetFreeProduct ()) {
7 }

我希望你能注意到这两个条件语句之间的差异。哪一个更整洁?很明显第二个更整洁,更好。这是因为,首先,可以删除注释,因为我们看代码就明白了意思。其次,也是最重要的一点是,我们提取了检查客户是否值得获得免费产品的逻辑到它的方法中,这是一件好事,特别是当你想要在应用程序中再次使用它的话。

  对于更详细的例子,我推荐你阅读我以前发表过的文章。

  结论

  请允许我用一个免责说明来结束这篇文章。我不反对注释。注释在大多数情况下是非常有用的,尤其是在开源项目中。

  我想说的是,你不应该为你的坏代码注释。请记住,“真理只存在于代码中”。

时间: 2024-10-11 04:36:47

什么时候应该避免写代码注释?的相关文章

究竟要不要写代码注释?

看完上图你是什么反应?会骂人吗?会就对了--,代码整洁之道,是一条很漫长的路,注释是其中一部分. 如果是一个很大的方法,要不要加注释?一个大方法按照它的功能被分割成几个小方法,这样代码就比较容易阅读了,但有的童鞋说能在项目的deadline里面搞出来就行了,哪有时间整理这种大方法?为了让你的搭档或者接手者,更轻松的理解,让她/他少加班,抽时间还是整理一下吧.按照树的结构,一个主干,其他分支都是处理不同的逻辑. 如果是小方法能做到见名知意,就一定要见名知意,习惯总是要培养的,接一句鸡汤:走得慢并不

写出规范化的高可读性的函数代码注释

对代码接触的越多,我越来越想让写出的代码更加perfect,更加高可读性,其中各个函数的代码注释就是非常关键的一步: /** * 函数功能 * @name 名字 * @abstract 申明变量/类/方法 * @access 指明这个变量.类.函数/方法的存取权限 * @author 函数作者的名字和邮箱地址 * @category 组织packages * @copyright 指明版权信息 * @const 指明常量 * @deprecate 指明不推荐或者是废弃的信息MyEclipse编码

关爱码农成长:关于写代码二三事

工作这么多年以来,一直从事软件相关领域,即使担任主管职务,也一直对技术充满热情.写代码写了这么多年,多少有些体会.我把自己对写代码这份工作的心得写下来,希望能给从事相关领域或有志于写代码的人参考. 一.你适合当程序员吗? 程序员,也叫软件工程师.程序设计师,我觉得「程序员」三个字简洁有力,是一种身份的象征. 如果你正从事这份工作,恭喜你!这是个热门行业,在可预见的将来,也不会消失.不过也别高兴太早,这一行的技术汰旧换新非常快,必须不断努力学习才行. 一点天赋 打开一个空白文档,必须创造出代码.与

9个最有趣的代码注释

1.原先我还知道我在写什么,但是现在,只有上帝知道了. 这条注释是优秀数学家Karl Weierstrass写的.我唯一想问的是,他前后指的是不是同一个数学难题.如果是,那又是为什么,我真的非常想知道. 2.谨将我的所有代码所有工作献给我的妻子Darlene,因为她养育了我和我们的三个孩子,以及会一条人来疯的狗. 好吧,为这家伙的幽默感点个赞!即使不是幽默感发作,那也勇气可嘉.无论如何,读到这里,我感动得热泪盈眶. 3.等我喝醉了再来修复. 我之所以钦点这一条,是因为我特别想知道这家伙喝醉了以后

如果在洗澡的时候脑子里还没有程序的整体结构,那就意味着还没有做好开工写代码的准备

成为优秀程序员的10个有效方法 作为一个在 IT 行业的软件程序员,每天促使我去上班的动力就是对编程的乐趣和激情.但是为了激发乐趣并获得永恒的快感,我们需要学习和遵守一些基础知识以成为一名优秀的程序员. 当然我总结的这些东西没有那么神,你说你要想学了之后就一定可以成为优秀程序员,那是不可能的.这只是从我的经验角度出发提供的一些捷径.对于优秀程序员的定义,此处可以理解为能开发出超棒的 IT 解决方案并且能促进行业整体发展的程序员. 1. 掌握基础知识 不管任何行业和任何工作,概念的理解都是成功的关

PHPDocumentor代码注释规范说明

   PHPDocumentor是一个的用PHP写的道具,对于有规则注释的php程序,它能够快速生成具有相互参照,索引等功能的API文档. 标记 用途 描述 @abstract   抽象类的变量和方法 @access public, private or protected 文档的访问.使用权限. @access private 表明这个文档是被保护的. @author 张三 <[email protected]> 文档作者 @copyright 名称 时间 文档版权信息 @deprecate

vs2010代码注释自动生成api文档

最近做了一些接口,提供其他人调用,要写个api文档,可是我想代码注释已经写了说明,能不能直接把代码注释生成api?于是找到以下方法 环境:vs2010 先下载安装Sandcastle 和Sandcastle Help File Builder 下载地址 http://sandcastle.codeplex.com/ http://shfb.codeplex.com/ 其中Sandcastle Help File Builder安装较复杂,安装红框内的即可 安装完成后,然后让要使用的项目输出xml

词法分析器:代码注释

前沿:词法分析器是将一段程序的代码按照类别分开.一般来说是将关键字, 变量名  , 常数 运算符( + _ * / )和界符分类词法分析算是编译的基础把今天上编译原理的实验课, 看了看  老师给的代码 添加了一些注释大致的流程是这样的:规定关键字的符号是10数字的符号是数字本身+ - *  = 这些符号代码中的case里面有(分别是13 14 ...),可以看懂的首先, 把程序存到制定的内存区域, 这里是划出了一个连续的空间(放到字符数组);然后再按字节读取里面的内容 , 当读到空格(" &qu

【转载】-如何写代码-编程智慧

原文地址:http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy 编程是一种创造性的工作,是一门艺术.精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的"智慧",并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋.然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获. 反复推敲代码 既然"天才是百分