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

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

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

请允许我用一句名言来开始我的论证:不要注释坏代码——重写吧。——Brian W. Kernighan and P. J. Plaugher

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

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

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

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

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

典型的解决方案

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

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

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

<?php

// Check to see if the customer can get free product
if ($customer->isPremium() and $customer->numberOfPurchases > 8) {

}

// OR

if ($customer->canGetFreeProduct()) {

}

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

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

结论

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

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

来源:51CTO

时间: 2024-11-02 04:48:36

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

HTML注释代码引起的IE6浮动的bug

文章简介:IE6浮动注释BUG. 在IE6里面DIV 与DIV之间或者是SPAN与SPAN标签之间由于浮动 并且在这些标签之间有一些HTML注释代码,这样在IE6里面浏览的时候就会出现最后一个浮动的元素里面的字符会被复制出去并显示在元素的外面 效果图 这一段是代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&quo

另类推广:网站推广中html注释代码的作用

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 < html注释代码:网站推广中html注释代码的作用>一文着重描写了通过无意中查 看网页的源代码,发现自己审核的文章中又通过html注释代码添加推广网站的网站地址的,并详细的介绍了使用html注释代码的推广作用和 使用方法,是一篇不可多的网站推广的佳作. 在万能导航网的全面支持下,如今的顶峰网非常受到百度.谷歌搜索引擎的青睐,一

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

看到标题,我知道你可能会想:"我为什么要避免代码注释,这难道不是一件好事吗?".是的,写注释在大多数情况下是有用的.但是,请注意,我说的是"在大多数情况下",因为有一些情况下,你不应该写注释. 还不相信?那让我告诉你:写注释有时会坏事!会导致坏代码! 请允许我用一句名言来开始我的论证: 不要注释坏代码--重写吧.--Brian W. Kernighan and P. J. Plaugher 这句话给我流下了非常深刻的印象.仔细想一想,有多少次你注释你的代码,只是因为

linux中Sed 正则替换代码中的日志开关、错误级别值修改、注释代码

背景:多个项目进行代码的日志打印级别统一替换时,如果文件庞大,数目多,一个个去做显然力不从心,得通过脚本,这种替换sed最适合不过了. 如题: I: 我想把:log_threshold =N; 替换为:log_threshold =1; 我想把:show_debug_errors=AnyWord; 替换为:show_debug_errors=false; II: error_reporting(E_ALL ^ E_NOTICE); 变: //error_reporting(E_ALL ^ E_N

php 批量修改RAR文件注释代码(1/2)

从当前文件夹添加全部 *.hlp 文件到压缩文件 help.rar 中 winrar a help *.hlp 从文件添加注释可以使用 -z<文件> 开关. winrar c -zinfo.txt dummy 这样,我们就可以通过php教程调用cmd,运行上述两个winrar参数来做到批量修改rar文件的注释及添加压缩包的文件.需要注意的是,php在安全模式打开的情况下是不能直接调用cmd的. 下面的代码就是我通过我的数据库教程读取出文件路径并最终实现批量修改rar文件注释的方法.因为数据库是

根据Merge Sort原理,自己实现的归并排序算法+详细注释+代码

1. 不多废话,我已经把注释写得很详细了,C#实现的分享如下: /// <summary> /// 归并排序之归:归并排序入口 /// Updated by Lihua at 05/06/2009 /// </summary> /// <param name="data">无序数组</param> /// <returns>有序数组</returns> /// <author>lihua</aut

用 HTML 标记的古怪代码注释

现在我明白了,我在编程方面的很多做法都是古怪的.不入流的,不过,对我而言,多多少少是有帮助的.我的网站比大部分网站,肯定存在更多的问题,但是我交付的速度快了不少.你不都懂的. 我从来无法正确学到的一件事,就是注释我的代码.人们通常注释代码的方式如下: PHP The Right Way 的代码摘录 上面的代码是从 PHP The Right Way 直接摘录的.我纠结的地方在于,代码缩进越深,代码就变得越发难以理解.如果你深入两个 foreach 循环,你该如何知道这部分代码起始何处?问题在于注

用javascript动态注释掉HTML代码_javascript技巧

1 2 3 4 5 6 7 8 你没有看到34单元格吧,因为他用javascript注释掉了,怎么做的?看源文件!源文件怎么看?点右键,选择"查看源文件(V)"... 注意:动态注释的html中不能再有html注释代码"<!-- -->",<script>与</ script>之间,不要有"<!--"和"//-->" 除了这个方法,你还可以用document.getElement

提高代码可读性的十大注释技巧分享_相关技巧

本文讲述了提高代码可读性的十大注释技巧.分享给大家供大家参考,具体如下: 很多程序员在写代码的时候往往都不注意代码的可读性,让别人在阅读代码时花费更多的时间.其实,只要程序员在写代码的时候,注意为代码加注释,并以合理的格式为代码加注释,这样就方便别人查看代码,也方便自己以后查看了.下面分享十个加注释的技巧: 1. 逐层注释 为每个代码块添加注释,并在每一层使用统一的注释方法和风格.例如: 针对每个类:包括摘要信息.作者信息.以及最近修改日期等: 针对每个方法:包括用途.功能.参数和返回值等. 在