代码整洁之道札记:注释

前言:曾经我对“一份好的代码里注释至少要占到一半的份量”这样话深信不疑,我也不厌其烦的给每一个函数都加上javadoc,对此,我深感自豪;而对于别人写代码不加注释的“坏习惯”,我深表遗憾。然而当我读完Robert的“注释”一节,我已经懊恼不已,并且我已经开始对我的代码进行审核,再次优化。我已经开始遵守“别给糟糕的代码加注释–重新写吧”这条准则。

也许你是一个好人,会对代码进行不断的优化改进,然而你经常会把注释忽略掉,就如同下面这样:

/**
  * 集合竞价.
  *
  * @param orderFromClient
  * @return
  */
 private Message callAuction(SelfOrder orderFromClient, long b, JadeInfo jadeInfo) {

方法参数已经改变了,然而javadoc的注释中依然只有一个参数。

我个人已经深深地被Robert影响了,代码才能最忠诚的告诉它在做什么,而不是注释。但是我们很多人,包括在看这本书之前的我,认为写得一手好注释的程序员才是好程序员,当然这不包含那些只会写糟糕代码的人。

用代码来阐述

我们来比较一下这两种代码:

public void pause() {

  if (isNotAction()) {
   return;
  }
}

/**
  * 节假日或当天无交易商品,服务器不执行操作
  */
 private boolean isNotAction() {
if (isHoliday || !hasTradingJade) {
   return true;
  }

  return false;
 }
public void pause() {
// 节假日或当天无交易商品,服务器不执行操作
if (isHoliday || !hasTradingJade) {
   return ;
  }
}

我认为第一种更好,因为节假日以及无交易商品,就说明服务器当日不需要运行,那么用isNotAction来表明会更好。

好注释

对意图进行解释

/*
  * 按照用户id对资金变化量进行排序,从而保证在多线程同时更新资金字段时,不发生死锁
  */
 @Override
 public int compareTo(VarialMoneyUser o) {
  return this.getUid().compareTo(o.getUid());
 }

这样的注释,我认为还不错,说明了使用compare的意图。

TODO注释

有的时候,我们的需要做一些事情,而我们暂时没有做,那么就可以使用TODO,这样IDE就会管理到这些TODO,当然还有FIXME标记,表明我们有些问题暂时不知道怎么优化、改善。

trade.setDjzj(BigDecimal.valueOf(0));// FIXME 冻结资金待实现
// TODO 计算账户的盈亏,根据风险控制等级,标示次日需要提醒、限制交易、强制平仓的账户

但是需要注意,定期的回头检查,eclipse提供以下图片的功能,你要删除那些无用的TODO

坏注释

喃喃自语

public void dailyUpdateSystemData() {
  // 每日更新时进行一次会员信息更新
  AllMembercoes.init();

以上的注释毫无必要。

多余的注释

/**
  * @Description: 获取指定日期的行情日报
  */
 public QuotationDailyReport getQuotationReportByDateAndScode(QuotationDailyReport report);

 /**
  * @Title: addQuotationReport
  * @Description: 添加行情日报
  * @param tradeReport
  * @return
  */
 public int addQuotationReport(QuotationDailyReport tradeReport);

 /**
  * @Title: getLastQuotationReport
  * @Description: 获取指定商品上一次的行情日报信息
  * @param map
  * @return
  */
 @SuppressWarnings("rawtypes")
 public QuotationDailyReport getLastQuotationReport(Map map);

这些注释比没有注释还可怕,其实看方法名称,都知道要做什么,加上注释后反倒浪费时间。

ps:我之前非常喜欢加这种注释,我恨不得在每一个方法上面加上注释,但是自从我明白了,方法名本身就应该代表了方法要做什么以后,我深恶痛绝自己以前荒唐的行为

误导性注释

这个非常的可怕,很多时候,注释和代码表达的意思完全相反,或者牛头不对马嘴,总之很容易让人迷惑。

// 12点后设置isreload为true,重新加载配置,
 private void updateReloadStatusTrue() {

这个注释在本意上应该是非常友好的,提示这个方法是在12点以后执行的,但是我上下文翻看,压根找不到任何12点的信息。

这样会好一点

/**
  * 设置isreload为true,表明配置服务、商品服务可以重新加载了
  */
 private void updateReloadStatusTrue() {
  reload = true;
  ConfigService.isReload = reload;
  JadeInfoService.isReload = reload;
 }

循规蹈矩的注释

哦,这种注释多发生在方法上,我曾经就非常热衷于这样的注释,现在我才知道其可怕之处。

/**
  * @Title: updateQuotation
  * @Description: 修改指定商品的行情信息
  * @param quotation
  */
 public void updateQuotation(Quotation quotation) {
  this.quotationMapper.updateQuotation(quotation);
 }

title、param的注释有两种坏处

  1. 非常多余,难道方法本身不能告诉我吗?
  2. 阻碍重构,当方法名、参数名需要重构或者添加参数时注释是不会紧随变更的。

日志式注释

以前我们特别喜欢在代码里加上以下这样注释

// start update by maweiqing
      // 如果能够接收到消息,说明客户端已经进行操作了,那么就更新session的时间
      data = CryptUtil.encrypt(data, SessionManager.getSession(getSession().getSessionId())
        .getEncryptKey());

      // end update by maweiqing 2015-05-27

看到Robert的建议后,我真的才恍然大悟,这样的代码还要SVN的代码管理器干嘛?SVN在提交的时候自然会让你输入你的修改理由、以及自动显示署名、日期的。

废话注释

// 标识列
 private Integer id;
 // 用户id
 private Integer userId;
 // 用户名
 private String userName;

这样的注释完全没有必要,你认为有吗?

/**
  * @return the id
  */
 public Integer getId() {
  return id;
 }

 /**
  * @param id
  *            the id to set
  */
 public void setId(Integer id) {
  this.id = id;
 }

还有利用IDE生成的这种bean注释,我真后悔自己当初为什么会这样想,加上这样的注释让自己显得专业吗,显然适得其反。

位置标记

虽然我暂时没有在自己的代码中找到,但是之前我这样做过。

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//aaaaaaaaaaaaaaaaaaaa

注释掉的代码

哦,显然我又中招了,之前我特别喜欢把那些所谓还有作用的代码留在代码里,及时压根就是错误的。但是自从我看到Jeff的博客后,我就开始删掉了那些注释掉的代码,今天再看到Robert的文章,感觉这些伟大的程序员他们都会有这样相似的真理。

如果你的代码中还有这样的注释,请尽快删掉吧,危害太大。

总结:我觉得Robert的文章越来越深入的影响着我,让我改变了很多陋习。

时间: 2024-08-27 20:59:16

代码整洁之道札记:注释的相关文章

代码整洁之道札记:格式

前言:东汉大臣陈蕃有一则这样的故事,"一屋不扫何以扫天下",寓意来表明一个大丈夫,如果连自己的居室都不能打扫干净,怎么胸怀天下.<代码整洁之道>就是来劝诫我们程序员写出更优秀的代码,而"格式"一章也恰巧给我们举出了很多原则,以供我们写出更加规整的代码. 格式的目的 好的代码格式,让人赏心悦目,并且随着版本的更迭,让你能够随心所欲的进行变更,而不是每次都痛苦不堪. 垂直格式 类文件的行不应该成千上万行,应尽量保持短小,当然这点很难做到,我们习惯于在一个类中

代码整洁之道札记之整洁代码

前言:一直以来,我都非常喜欢整洁规则的代码,我痛恶那些杂乱不堪的代码,然而<代码整洁之道>将要告诉我的远不止这些,那么,我希望将自己欣赏的.能够给我帮助的.指引我前进的方案记录下来,以用来我日后翻看. 要有代码 将需求明确到机器可以执行的细节程度,是编程要做的事.一个好的产品,显然其最精髓的不应该是外观,而是诸如Java编译后的class文件. 糟糕的代码 看到"糟糕"这个词就觉得可怕,我之前接手的一个web项目,最初打包完成后,足足有48M,里面充斥着大量的垃圾代码,糟糕

代码整洁之道札记:有意义的命名

前言:英语虽然才3级,奈何却阻止不了我征服英语的勇气,哈哈,有意义的命名,那必须要倾尽我的所有英语才华,去实现代码的整洁啊. 名副其实 这个说起来容易,做起来难,我们的母语是汉语,最熟悉的是汉语拼音,所以我们在新建一个类名.方法.变量时,第一刻的印象是由拼音组成的:另外由于项目参与者的英语水平又参差不齐,又会产生混乱. public class Time { private long time1; private long time2; private long time3; private l

代码整洁之道札记:函数

前言:随着对<clean code>的不断深入研读,我越发对自己以前编写的代码感到厌烦,我开始着手去做一些改变,让我不再是一个傻瓜,我想让别人去读懂我的代码,因为我记得这样一句话:"任何傻瓜都能编写计算机看懂的代码,而好的程序员能够编写人看懂的代码". 短小 前两天,在百度首页上看到这样一张照片,手枪还没有巴掌大,我觉得非常适合Robert的这个主题. 函数是要足够的短小精致.那么具体应该短小到什么程度呢? 函数20行封顶最佳. 每个函数都依序把你带到下一个函数. 函数的缩

《代码整洁之道》读后感

众所周知,软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发派还是传统开发派,都不得不承认.<代码整洁之道>提出一种观念:代码质量与其整洁度成正比.干净的代码,既在质量上较为可靠,也为后期维护.升级奠定了良好的基础.作为编程领域的佼佼者,这些实践在<代码整洁之道>中体现为一条条规则(或称“启示”),并辅以来自现实项目的正.反两面的范例.只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量.以上便是<代码整洁之道>这本书的内容简介,

《代码整洁之道》精读与演绎】之四 优秀代码的格式准则

本系列文章由@浅墨_毛星云 出品,转载请注明出处.  文章链接:http://blog.csdn.net/poem_qianmo/article/details/52268975 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 这篇文章将与大家一起聊一聊,书写代码过程中一些良好的格式规范. 一.引言 以下引言的内容,有必要伴随这个系列的每一次更新,这次也不例外. <代码整洁之道>这本书提出了一个观点:代码质量与其整洁度成正比,干净的代码,既在质量上

&lt;代码整洁之道&gt;、&lt;java与模式&gt;、&lt;head first设计模式&gt;读书笔记集合

一.前言                                                                                       几个月前的看书笔记,内容全部都是摘自书中比较精辟的句子.笔记都是一段一段的句子,故没有文章的篇幅概念,仅供温习之用,更多详细内容请看原书!!! <代码整洁之道>里面有很多前人编写简洁.漂亮代码的经验.当然书中作者的经验并不100%适合每个人,但大部分都是可借鉴的! <java与模式>这本书内容太多了,我

【读书笔记】--代码整洁之道

“相对于任何宏伟景愿,对细节的关注甚至是更为关键的专业性基础.首先,开发者通过小型实践获得可用于大型实践的技能和信用度.其次,宏伟建筑中最细小的部分,比如关不紧的门,有点儿没有铺平的地板,甚至是凌乱的桌面,都会将整个大局的魅力毁灭殆尽.这就是整洁代码之所系”----没有比书中的这段话更能说明这本书的意义了. <代码整洁之道>是第1期书山有路活动选出的读本.相对于记住那些如何写出整洁代码的那些法则,养成保持代码整洁.提高代码质量的习惯和思维更为重要.全书大致分为三个部分,第一部分1-10章都是介

代码整洁之道

命名,多花些时间推敲命名, 有意义的命名非常重要. 接口的命名,不使用"I"开头比较简洁,加上I以后是比较规范,但是比较繁琐以及废话.如果想区别接口和实现,不如在实现类中进行编码,比如添加后缀"Imp",android以及jdk中的大多数接口都没有使用I. 取名字带有简写要慎重, 比如"人事系统"的类, 前面都是"RSXT..",除了让快捷按钮找不到类以外,没有啥意义了,用包吧. 函数,函数要短小,要职责明确,最好功能单一,参