程序员应该避免写注释

“程序员工作效率有多高,取决于他大脑中对当前项目的熟悉程度,即变量名称、数据结构、编程接口以及工具类甚至是目录等,这些细节记住的越多,效率也越高。”

注释不是用来翻译程序代码的,用代码能说清楚的东西,就不要再用自然语言费脑子去写了,集中精力写出最优雅、质量高的代码才是首要的。这并不是说可以完全不写注释,而是说不要为了添加不必要的注释而打乱你的思路。我很赞成这两篇文章的观点《世上最糟糕的两个变量名》以及陆其明老师翻译的《避免在代码里写注释》,有一个好的变量名、方法名其实就是一段很好的注释了,并且还会“自动更新”,你不用在未来优化这段代码的时候同步更新注释。

我们写注释的目的不是说这段代码如何执行,而是想解释为什么要这么执行,这也正是与其研究代码、研究注释,不如研究写下这些代码的人,借用一下阿特伍德的博客原文中的例子:

r = n / 2;
while ( abs( r - (n/r) ) > t ) {
r = 0.5 * ( r + (n/r) );
}
System.out.println( "r = " + r );

这段代码没有注释就完全看不懂了,如果加上一点注释说明一下则效果要好得多:

// 用“牛顿-拉夫逊”近似法求解n的平方根
r = n / 2;
while ( abs( r - (n/r) ) > t ) {
r = 0.5 * ( r + (n/r) );
}
System.out.println( "r = " + r );

这么一来注释的作用就完成体现出来了,但是如果不用注释呢?像这样:

private double SquareRootApproximation(n) {
r = n / 2;
while ( abs( r - (n/r) ) > t ) {
r = 0.5 * ( r + (n/r) );
}
return r;
}
System.out.println( "r = " + SquareRootApproximation(r) );


“我一行注释也没有加,但这段神秘的代码现在已经非常容易理解了。”

我们每个人在项目中应该都有遇到过这样的事情,与其让他写下一堆注释,不如告诉他命名的重要性,能完全、准确地描述所代表的事物,这无疑能提高整个项目的可读性。在命名方面也有一些陷阱,如果一个命名不能做到准确的命名,这就和一段错误的注释描述正确的行为一样让人更加费解,而且如果你在命名一个类时没有考虑太多,在后期发觉不好,要更换名称的时候会很麻烦,你可能要改头文件的名称、实现文件的名称,各种调用以及导入的地方,甚至是创建文件时自动生成的一点注释,就这要求我们在创建一个类和方法时,头脑中至少要对将要做的事情“优化”好几遍,能准确无误的表达自己想表达的东西,对一些人来说,这个过程会很累,但确实是有必要。

对命名使用准确的对仗词,有助于保持代码一致性,最终提高可读性。针对变量使用的对仗词:

  • begin/end
  • first/last
  • locked/unlocked
  • min/max
  • next/previous
  • old/new
  • opened/closed
  • visible/invisible
  • source/target
  • source/destination
  • up/down

针对方法名使用的对仗词:

  • add/remove
  • increment/decrement
  • open/close
  • begin/end
  • insert/delete
  • show/hide
  • create/destroy
  • lock/unlock
  • source/target
  • first/last
  • min/max
  • start/stop
  • get/put
  • next/previous
  • up/down
  • get/set
  • old/new

对于子程序(方法实现)过长的情况,要检查子程序的设计以及实现是否合理,必要的时候把子程序拆分为多个子程序,保持每个子程序的高内聚性(只做好一件事)总是有好处的。

千万不要把 bool 当成函数参数》这篇文章提出的问题很有意思,对于布尔变量,可以给布尔变量赋予隐含“真假”含义的名字。

最后,对你自己写下的代码,不要心存畏惧,不要把它尘封在那里,保持它的活跃度,在适当的时间对它进行重构,如果要问重构到什么地步,那就是:到你没时间重构为止

时间: 2024-09-20 04:20:17

程序员应该避免写注释的相关文章

java程序员 你们都写静态页 样式什么的么?

问题描述 一天经常改静态页样式什么的也学不到什么3GWEB开发都是简单的功能是不是该走了? 解决方案 解决方案二:现在做的多数是JavaEE,你做的基本上不能实现自己的人生价值了解决方案三:引用1楼jialoveqiqi的回复: 现在做的多数是JavaEE,你做的基本上不能实现自己的人生价值了 也是j2eessh等等只不过是简单些没什么复杂的功能没劲想走解决方案四:东西要自己平时多学点..这样你才会变得强大..解决方案五:你到底是3G还是WEB开发互有借鉴的东西都是解决方案六:其实3G也是很不错

为什么程序员喜欢深更半夜写代码

程序员自己也常说,工作效率最高的时候总是在深夜,不是凌晨还在写代码就是凌晨爬起来写代码. 深夜之所以工作效率高是因为不易分心,额!其实仔细想想晚上和白天并无多大区别,但程序员们也总是有自己的理由,大致分为一下三点. 1.生产型时间表 记得曾看过一篇关于时间表的文章,他们把时间基本分为两类:管理型和生产型时间表,所谓的管理型时间表是把一天的时间分成每小时来安排,就算是有别的事打扰到你也只是浪费了这一点时间. 而生产型时间表就不一样了,这段时间是程序员需要全身心的投入到工作中去,不希望在这之中有任何

程序员,你写过的代码比你吃过的饭还多吗?

工作日午既不想随便将就,又懒得大费周章,那吃什么好呢?不如来份盖饭!盖浇饭是西北甘肃地区叫法,东北叫烩饭,广东叫碟头饭,还有的地方叫咖喱土豆饭,咖喱鸡饭,麻婆豆腐饭,番茄蛋饭,番茄牛肉饭,总之都是菜和饭放在一个盘子里吃.盖饭上的菜一旦和米饭组合起来,就像被重新赋予了使命,它们存在的所有意义,都是为了让享用者完整地将这道饭入肚.简单.快速.美味还能外带的"盖浇饭"应该是大多数程序员点外卖的最爱! 番茄鸡蛋盖浇饭   我的意中人是盖饭英雄,有一天他会带着西红柿鸡蛋盖饭来娶我.即使是八大菜系

程序员应该注释

如果说建筑师最后的成品是建筑的话,那么程序员和软件工程师最终的成品将会是软件.在实际动工之前,建筑师会将建筑的每一个细节都掌握,都在蓝图上得到体现.但是程序员和软件工程师并不相同.这可能就是为什么房子很少倒塌,而软件却经常崩溃的原因? 写代码和写文章,从某种程度上是有关系的,需要逻辑.构架,也要尽可能的简练.创作者的时间表和管理者的时间表是不相同的,编代码和写文章,都是一个孤独而不能受到干扰的过程,面对屏幕,就是一场自己与自己的战斗. 同样,如果说建筑师最后的成品是建筑的话,那么程序员和软件工程

天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码?

小编特地从阿里技术协会(ATA)分享一篇内部文章:   不管是开发.测试.运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己. 然而"梦想是美好的,现实却是残酷的",很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说"天天写业务代码还加班,如何才能成为技术大牛",测试说"每天都有执行不完的测试用例&quo

程序员应该避免的 5 种代码注释

你有没有这样的经历:别人审查过你的代码之后给出的注释,你认为是没有必要的?注释代码是为了提高代码的可读性,目的是为了能让其他人更容易理解你的代码. 我特别讨厌这5种注释类型以及制造它们的程序员.希望你不是其中之一. 1.自以为很了不得的程序员 public class Program { static void Main(string[] args) { string message = "Hello World!"; // 07/24/2010 Bob Console.WriteLi

程序员如何写出一份好的文档?

在实际的软件开发工作中,除了编写代码之外,程序员还会花大量的时间来编写相关的研发文档,这些文档包括:详细设计文档.单元/集成测试文档.软件版本开发报告.软件安装说明.软件升级指导书等. 在<程序员既要写好代码,又要写好文档>(http://www.zhouzhaoxiong.com/142.html)一文中,我提到过:"代码"和"文档"就像是一个人的左膀右臂,一定要让两者均衡发展,而不能够只顾其一.既然文档这么的重要,那么对于程序员来说,我们如何才能写出

想成为优秀的程序员这些码德不能缺

我把这些看成是作为一个程序员的基本素质,多数是编码之外的事情: ●代码每天备份:(预防意外导致的任何损失) ●上传代码时写清楚log信息:(为维护这个模块的人着想,有可能是你自己) ●提供接口时不要把问题抛给使用接口的人,升级或者变更接口时不要删掉原来的接口:(为使用你接口的同事着想) ●变量命名要见名知意:(起码不能误导别人) ●在工程中新建一个doc文件夹将项目相关的文档放在该目录下,方便后面维护的人员理解项目和代码:(为维护这个模块的人着想,有可能是你自己) ●签署bug或者转办bug时写

C#程序员面试(一)答案

程序|程序员 前提:状态栏面板sbpFilePath已经设定为自绘样式.当有如下代码段1被执行一次以后: 代码段1:private void treeviewArchives_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e){if (e.Node.Text!= "" ) {try{this.richtexebox.LoadFile(Application.StartupPath+e.Node.Tex