阅读更多

3顶
5踩

编程语言

翻译新闻 避免代码注释的五大理由

2013-07-16 09:57 by 副主编 WnouM 评论(20) 有14884人浏览



代码注释的作用一直以来都被程序员们广泛讨论。很多人认为注释不是必要的,写注释那是因为代码可读性太差了。原文作者Paulo Ortins发表了博文《5 reasons to avoid code comments》,以下为译文:

通常,我们阅读代码比编写代码花费的时间要更多。虽然我从未见过任何科学研究能够证明这一点,但是在软件领域,它就好比一个教条或者信念如此的根深蒂固。因此编写易于阅读的代码就显得尤为重要。程序员可以通过一些技术来实现它,其中一点就包括代码注释。

关于代码注释的文章,网络上有很多讨论。我们应该使用注释来解释代码吗?还是应该注重编写表达式代码而无需阅读注释?Joe Kunk曾发表过一篇文章《To Comment or Not to Comment》其中有段内容是说所谓的好代码是指我们应该避免注释,因为注释通常是用来解释/隐藏恶意代码。

下面就来讨论下避免写代码注释的五大理由:

1. 程序员更加倾向于鼓励”坏“代码。

有一种说法,有代码注释的就是好代码,因此,程序员经常在代码边上写注释,使其看起来更加出色。如果我们把代码注释当做一种信号,那么也许我们正在编写坏代码。每当我们写注释时应该思考如何使代码看清来更加洁净。

2. 花费更多时间来编写和维护

如果注释没有跟随代码的变化而变化,即使是正确的注释也没有用。注释通常作为代码的第二个版本。当为某个函数写注释时我们需要不断的重复自己,这就违反了DRY(Don’t Repeat Yourself) 原则。花费时间来增加复杂性,软件需求改变了,代码也随之跟着变化。如果我们写注释,这就意味着必须去维护注释。因此,除非是很必须要,否则我们应该拒绝在注释上花费双倍时间,相反我们可以利用这些时间来提高代码的质量或开发新的特性。

3. 注释不是测试/验证

修改代码可以依赖工具,比如使用编译器、IDEs及单元测试;而注释却不能。注释没有这些工具,你无法依赖工具或者单元测试在正确的地方或者过期后来确保它们的正确性。一旦你写了注释,没有测试模块来验证它的正确性,一旦这个注释失败了,那么它就永远的失败了。

4. 注释没有代码文档可靠

通常,注释过期后,它们往往与代码失去了连接性。程序员阅读这些注释或许被“欺骗”了。即使不断的更新了代码注释,唯一了解的是这个代码应该是什么以及它的可读性。举个例子,如果老本问我们如果项目发生了更改,我们从哪能看出?是代码还是注释?——答案当然是代码。

5. 代码注释风格填补了屏幕空间

采用标准化的注释尤为重要,某些注释标准(如同下面)使用了很多行,这就要求你尽可能多的阅读更多代码。

/**
*
* @param title The title of the CD
* @param author The author of the CD
* @param tracks The number of tracks on the CD
* @param durationInMinutes The duration of the CD in minutes
*/
public void addCD(String title, String author,int tracks, int durationInMinutes) {
CD cd = new CD();
cd.title = title;
cd.author = author;
cd.tracks = tracks;
cd.duration = duration;
cdList.add(cd);
}


PS:本文所说的“避免代码注释",并不是说就不写代码注释,而是尽量避免去写代码注释,假如你认为值得也可以这么做。

原文出自:Pauloortins / 译:CSDN
  • 大小: 20.9 KB
来自: CSDN
3
5
评论 共 20 条 请登录后发表评论
20 楼 lliiqiang 2014-05-13 16:17
轻松环境要让程序员不分心,否则这种轻松是降低效率反而对于企业不好.
19 楼 justdojava 2013-07-25 09:18
if(i!=我){} 写道
justdojava 写道
代码注释的一大理由
/**
 * @description 一句话描述
 * @task sometask
 * @author justdojava
 * @version 1.0.0-beta
 * @time 2013-7-16
 */

引用
在多人合作的超大项目中,如果有上面的注释,你可以不用通过其他任何项目管理工具,而快速的在代码中全文检索到你在某个时间段对某个版本的某个任务(bug,改进)做了什么。



为什么不用项目管理工具?你能保证你每次都更新?你能指望其他人复制你的代码时正确修改?或者不使坏?


  • 可以使用项目管理工具,但相对于项目管理工具,这种注释在检索时更直观,定位更/快速,相对于不同的项目管理更独立;
  • 每次更新的时候,对外提供的API一般是不会轻易改变的。如果API改变,且不向前兼容,主版本号要更改,只有这种情况下,才会更新注释中的一句话描述。这种情况下,如果都不能保证这种接口性质的注释更新,软件质量堪忧,项目风险堪忧。
  • 复制的代码会重构,且持续重构,以便于可读性和可维护性。如果你有修改这部分代码的权限,在修改后的代码,要找原作者审核。

相对于大量的代码,我更愿意看这个模块的注释和demo,而不愿浪费大量的时间,陷入显然已经稳定代码细节。
18 楼 raymao 2013-07-18 17:39
kidneyball 写道
raymao 写道
xchd 写道
改成 log.debug("开始计算工资")  这个不错,可以使用

而且编译出来的程序还是大个的


等你要在生产环境上排错的的时候你就情愿要大个了。

这个。。。我没有表达不需要写日志的意思
17 楼 laogao3232 2013-07-18 17:04
现在很少写注释了,多是解释业务逻辑的。
16 楼 aegean008 2013-07-18 15:36
注释和文档都很重要。
15 楼 kidneyball 2013-07-17 19:43
raymao 写道
xchd 写道
改成 log.debug("开始计算工资")  这个不错,可以使用

而且编译出来的程序还是大个的


等你要在生产环境上排错的的时候你就情愿要大个了。
14 楼 raymao 2013-07-17 14:55
xchd 写道
改成 log.debug("开始计算工资")  这个不错,可以使用

而且编译出来的程序还是大个的
13 楼 mz0827 2013-07-17 10:35
写注释主要是要把代码实现逻辑给写出来,让读者知道,这段代码是干嘛的。
12 楼 grandboy 2013-07-17 10:32
Checkmate 写道
代碼不需要註釋,好的代碼就是註釋.....
可是...
見到的有些公司明顯只做到了第一點

普遍现象
11 楼 xchd 2013-07-17 09:24
改成 log.debug("开始计算工资")  这个不错,可以使用
10 楼 ququjioulai 2013-07-16 23:38
可读性高最基本就是你英语必须够好,这样对于定义有意义的方法属性大家才能一目了然,如果是java是中文语言,直接就写

数字 每月工资=1000;
数字 一年工资=计算工资(每月工资,12);

按照上面写,应该大家都能看懂是啥意思,但是,国人很多英语都很烂的。
9 楼 vcok 2013-07-16 20:51
要么把代码写得足够好,根本不需要注释。要么写得足够差,写多少注释也不管用。我倾向于后者,这样才不会被公司炒掉。
8 楼 Checkmate 2013-07-16 16:58
代碼不需要註釋,好的代碼就是註釋.....
可是...
見到的有些公司明顯只做到了第一點
7 楼 kidneyball 2013-07-16 14:11
我现在团队的做法:
1. 内部注释尽量避免 (除非有充分理由且不符合下面列的4种替代方案)
2. API注释尽量详细

代码内部注释替代方案:

1. 用合理的命名达到同样表达效果
2. 如果注释是表示工作流程步骤,用log.debug或log.trace代替
例如 //开始计算工资
改成 log.debug("开始计算工资")
3. 如果注释是表示代码与需求的对应关系,用版本控制工具的提交信息代替 (完成一个小需求立刻提交并写好提交信息)
4. 不能用上面1,2,3解决的,把需要注释的代码抽取成独立方法然后在方法上写注释(其实是API文档。如果是私有方法,尽量用合理的方法命名代替)

不能用上面4项解决的,才写内部注释
6 楼 Shen.Yiyang 2013-07-16 14:08
除了java doc,没必要写其他注释。如果代码不能用doc的形式描述,说明设计得非常不好
5 楼 grandboy 2013-07-16 13:53
引用
PS:本文所说的“避免代码注释",并不是说就不写代码注释,而是尽量避免去写代码注释,假如你认为值得也可以这么做。


绝不做没有意义的事就行了。
4 楼 if(i!=我){} 2013-07-16 11:49
justdojava 写道
代码注释的一大理由
/**
 * @description 一句话描述
 * @task sometask
 * @author justdojava
 * @version 1.0.0-beta
 * @time 2013-7-16
 */

引用
在多人合作的超大项目中,如果有上面的注释,你可以不用通过其他任何项目管理工具,而快速的在代码中全文检索到你在某个时间段对某个版本的某个任务(bug,改进)做了什么。



为什么不用项目管理工具?你能保证你每次都更新?你能指望其他人复制你的代码时正确修改?或者不使坏?
3 楼 zhlfz 2013-07-16 10:52
凡事不要说的太绝对,不喜欢注释只要你代码写的让人一看就懂也行,但往往写的代码不加注释自己看的就麻烦。
有时候看到写的烂又不注释的代码只能...
2 楼 justdojava 2013-07-16 10:26
代码注释的一大理由
/**
 * @description 一句话描述
 * @task sometask
 * @author justdojava
 * @version 1.0.0-beta
 * @time 2013-7-16
 */

引用
在多人合作的超大项目中,如果有上面的注释,你可以不用通过其他任何项目管理工具,而快速的在代码中全文检索到你在某个时间段对某个版本的某个任务(bug,改进)做了什么。

1 楼 jjihuang 2013-07-16 10:07
很不错的理由!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 避免代码注释的五大理由[转载]

     避免代码注释的五大理由 作者: 夏梦竹 代码注释的作用一直以来都被程序员们广泛讨论。很多人认为注释不是必要的,写注释那是因为代码可读性太差了。原文作者Paulo Ortins发表了博文《5 reasons to avoid ...

  • Spring Boot 2.0选择HikariCP作为默认数据库连接池的五大理由

    Spring Boot2默认数据库连接池选择了HikariCP为何选择HikariCP理由一、代码量理由二、口碑理由三、速度理由四、稳定性理由五、可靠性HikariCP为什么这么快优化并精简字节码更好的并发集合类实现使用FastList替代...

  • 8.3-写代码必须要写注释吗?(为什么现实中不写注释?)

    一、写代码要写注释 “写代码要写注释”自从学编程,这就话就伴随着你。可见注释的重要性。 注释的作用: 说明函数的功能 说明函数参数的意思 说明函数这样设计的原理(计算公式) 说明函数的使用场景 作者和日期 ...

  • 代码注释

    大部分同学都坚持认为要写注释,但我写了几年后发现真正需要注释来帮助理解程序的地方是不是我们组织代码有问题呢? 我用C++3年,用C 3年,偶尔也用下java,读书的时候用是c++,工作后越来越用C,原因这里就不争论了,...

  • Spring Boot学习总结(18)——Springboot 2.0选择HikariCP作为默认数据库连接池的五大理由

    Springboot2默认数据库连接池选择了HikariCP为何选择HikariCP理由一、代码量理由二、口碑理由三、速度理由四、稳定性理由五、可靠性HikariCP为什么这么快优化并精简字节码更好的并发集合类实现使用FastList替代...

  • Springboot 2.0选择HikariCP作为默认数据库连接池的五大理由

    Springboot2默认数据库连接池选择了HikariCP为何选择HikariCP理由一、代码量理由二、口碑理由三、速度理由四、稳定性理由五、可靠性HikariCP为什么这么快优化并精简字节码更好的并发集合类实现使用FastList替代Ar...

  • Android笔记(五)(代码规范)

    Android代码规范整理

  • 【编码规范篇】| C#编码规范 代码规范总结,包括命名规范,代码规范 注释规范等

    在我们程序员日常开发的过程中,会编写代码是一个最基本且常规的操作。而作为一名合格的软件工程师,出产物就应该具备工程的健壮性和美观性,因此编码规范是作为软件工程师的职业素养。但是就编码规范而言,可能...

  • 阿里Java代码规范

    代码规范一、编程规约(一) 命名风格(二) 常量定义(三) 代码格式(四) OOP 规约(五) 集合处理(六) 并发处理(七) 控制语句(八) 注释规约(九) 其它二、异常日志(一) 异常处理(二) 日志规约三、单元测试四、安全规约五、...

  • 高质量代码的几大标准

    一、高质量代码的几大标准 如何写出高质量地代码? 要写出高质量代码,我们就需要掌握一些更加细化、更加能落地地编程方法论这就包含面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等等。 1、可维护性...

  • 编写可读代码,提高工作效率

    2.观点:代码是写给人看的,推荐一本书《编写可读代码的艺术》。 3.方法:以《编写可读代码的艺术》内容,结合实际项目代码,给出13条建议。 4.个性化建议。 5.项目代码举例。 6.总结,可读性的...

  • 如何避免自己写的代码成为别人眼中的一坨屎!

    笔者推荐三本经典的书籍《代码整洁之道 》、《编写可读代码的艺术》、《重构:改善既有代码的设计》,下文重点将从注释、命名、方法、异常、单元测试等多个方面总结了一些代码整洁最佳实践,大部分是笔者总结于以上...

  • 编写可读性代码的艺术

    在过去的五年里,我们收集了上百个“坏代码”的例子(其中很大一部分是我们自己写的),并且分析是什么原因使它们变坏,使用什么样的原则和技术可以让它们变好。我们发现所有的原则都源自同一个主题思想。 我们...

  • 谈代码整洁之道,如何写出优雅的代码

    最近为了制定团队的代码规范,拜读了鲍勃大叔的《代码整洁之道》,读完之后,在如何写出整洁优雅的高质量代码方面有很大的启发。我认为《代码整洁之道》是我们提高编程能力和自我修养必读之书。相信你读完之后,也会...

  • 如何编写高质量JavaScript代码

    书写可维护的代码(Writing Maintainable Code ) 软件bug的修复是昂贵的,并且随着时间的推移,这些bug的成本也会增加,尤其当这些bug潜伏并慢慢出现在已经发布的软件中时。当你发现bug 的时候就立即修复它是最好...

  • java+sql server项目之科帮网计算机配件报价系统源代码.zip

    sql server+java项目之科帮网计算机配件报价系统源代码

  • 【java毕业设计】智慧社区老人健康监测门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

  • 【java毕业设计】智慧社区心理咨询平台(源代码+论文+PPT模板).zip

    zip里包含源码+论文+PPT,有java环境就可以运行起来 ,功能说明: 文档开篇阐述了随着计算机技术、通信技术和网络技术的快速发展,智慧社区门户网站的建设成为了可能,并被视为21世纪信息产业的主要发展方向之一 强调了网络信息管理技术、数字化处理技术和数字式信息资源建设在国际竞争中的重要性。 指出了智慧社区门户网站系统的编程语言为Java,数据库为MYSQL,并实现了新闻资讯、社区共享、在线影院等功能。 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。

Global site tag (gtag.js) - Google Analytics