kuckboy1994/Blog

注释规范

kuckboy1994 opened this issue · 0 comments

此为开发团队遵循和约定的注释规范,意在降低后期维护的代价。

为什么要写代码注释?

  • 编码规范中有一条就是——见名知意。但有的时候直白的函数名不能表达完整的意思,这时候就是注释就可以很好的帮助我们解释和说明了。
  • 请确保你的代码能够自描述、注释良好并且易于他人理解。
  • 好的代码注释能够传达上下文关系和代码目的。

注释中写什么?

  • 难于理解的代码段
  • 可能存在错误的代码段
  • 浏览器特殊的HACK代码
  • 想吐槽的产品逻辑
  • 业务逻辑强相关的代码

对这些内容写一些注释对于自己或帮助他人理解是非常有帮助的。

什么时候写注释?

  • 在写代码前添加注释
    • 这时候你脑子里是清晰完整的思路。
  • 在写完代码之后添加注释
    • 你是在整理或者总结。
    • 它可能要花费你更多的时间。
      就好比做需求分析一样,你确认好了需求,直接写完。如果写完或者边写边确认需求,你将花费更多的时间。

注释尽量使用英文来描述 (不是必须的)

使用中文注释的弊端:
在文件编码改变的时候中文会变成乱码的问题。

用英文注释还是用中文注释, it is a problem, 但不管怎样, 注释是为了让别人看懂, 难道是为了炫耀编程语言之外的你的母语或外语水平吗;

注释的详解

注释一般的写法,遵从这个规范方便大家理解,解决强迫症的问题。。。

圣战—— tab vs space


千万不要tab和space混用,还有什么比生命更加重要呢?
优酷视频链接
o(* ̄︶ ̄*)o

单行注释

  • 双斜线后,必须跟注释内容保留一个空格
  • 可独占一行, 前边不许有空行, 缩进与下一行代码保持一致
  • 可位于一个代码行的末尾,注意这里的格式
// Good
if (condition) {
    // if you made it here, then all security checks passed
    allowed();
}
var zhangsan = "zhangsan";    // 双斜线距离分号一个tab(或多个tab,用于对齐),双斜线后始终保留一个空格

多行注释

  • 最少三行, 格式如下
  • 前边留空一行
/**
 * 注释的内容
 */

定义类型: 都是以{开始, 以}结束。

使用说明: 提供参数的说明. 使用完整的句子, 并用第三人称来书写方法说明.

栗子:

/**
 * [description]
 * @param  {[type]} params [description]
 * @return {[type]}        [description]
 */

// 以下的代码是 jquery-3.1.1.js 中的一段代码
/**
 * Checks document order of two siblings
 * @param {Element} a
 * @param {Element} b
 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
 */
function siblingCheck( a, b ) {
  var cur = b && a,
  diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex;

  // Use IE sourceIndex if available on both nodes
  if ( diff ) {
    return diff;
  }

  // Check if b follows a
  if ( cur ) {
    while ( (cur = cur.nextSibling) ) {
      if ( cur === b ) {
        return -1;
      }
    }
  }
  return a ? 1 : -1;
}

/**
 * 函数功能简述
 * 具体描述一些细节
 * @param    {string}  address     地址
 * @param    {array}   com         商品数组
 * @param    {string}  pay_status  支付方式
 * @returns  void
 *
 * @date     2017-04-10
 * @author   name<name@myheixn.com>
 */

单行注释和多行注释的使用规范

  • 方法前面使用多行注释。
  • 方法内部使用单行注释,如果内容比较多,使用多个单行注释。

文档注释

/**
 * @author: who are you
 * @date: when you write it
 * @description: the function of this file.
 */

标签

@author 标识开发者信息(非常重要)

注释一般出自author之手,对代码和项目最了解的人。

开发者信息能够体现开发人员对文件的贡献,并且能够让遇到问题或希望了解相关信息的人找到维护人。通常情况文件在被创建时标识的是创建者。随着项目的进展,越来越多的人加入,参与这个文件的开发,新的作者应该被加入 @author 标识。

@author 标识具有多人时,原则是按照 责任 进行排序。通常的说就是如果有问题,就是找第一个人应该比找第二个人有效。比如文件的创建者由于各种原因,模块移交给了其他人或其他团队,后来因为新增需求,其他人在新增代码时,添加 @author 标识应该把自己的名字添加在创建人的前面。

@author 中的名字不允许被删除。任何劳动成果都应该被尊重。

业务项目中,一个文件可能被多人频繁修改,并且每个人的维护时间都可能不会很长,不建议为文件增加 @author 标识。通过版本控制系统追踪变更,按业务逻辑单元确定模块的维护责任人,通过文档与wiki跟踪和查询,是更好的责任管理方式。

对于业务逻辑无关的技术型基础项目,特别是开源的公共项目,应使用 @author 标识。

示例:

/**
 * @author author-name(mail-name@myhexin.com)
 *         author-name2(mail-name2@myhexin.com)
 * @date: when you write it
 * @description: the function of this file.
 */

TODO 注释

对那些临时的, 短期的解决方案, 或已经够好但仍不完美的代码使用 TODO 注释.

TODO 注释要使用全大写的字符串 TODO, 在随后的圆括号里写上你的大名, 邮件地址, 或其它身份标识. 冒号是可选的. 主要目的是让添加注释的人 (也是可以请求提供更多细节的人) 可根据规范的 TODO 格式进行查找. 添加 TODO 注释并不意味着你要自己来修正.

// TODO(123123@qq.com): Use a "*" here for concatenation operator.
// TODO(123123@qq.com) change this to use relations.

全局查询
代码评审

多人合作注释

同一个文件的代码可能被多个人修改,这个时候需要标识出谁改动了哪些部分。

格式: // add begin by 作者名 ,一个分号;,再加上原因 Reason

代码添加的最后加上: //add end

Example

// add begin by liuxing ; Init post's id
var postId = 1;
// end add

或者

// add begin by liuxing
/**
 * 多行注释来说明原因
 */
var postId = 1;
// end add

工具(插件)

参考