第二章 代码注释

注释

注释是代码中最常见的组成部分.它们是另一种形式的文档,也是程序员最后才舍得去写的

单行注释

  • 独占一行的注释, 用来解释下一行代码.这行注释之前总是有一个空行,且缩进层级和下一代码保持一致
  • 在代码行的尾部注释.代码结束到注释之间至少有一个缩进.注释(包括之前的代码部分),不应该超过单行最大注释,如果超过,这条注释就应该放置在当前代码行的上方
  • 被注释掉的大段代码
// 好的写法
if (bol) {

    // 这里是代码注释
    test();
}

// 不好的写法: 注释之前没有空行
if (bol) {
    // 这里是代码注释
    test();
}

// 不好得写法: 错误的缩进
if (bol) { 

// 这里是代码注释
    test();
}

// 好的写法
var result = something + somethingElse; // somethingElse不应当为null

// 不好的写法: 代码和注释之间没有空格
var result = something + somethingElse;// somethingElse不应当为null

// 好的写法
// if (bol) {
//     test();
// }

// 不好的写法: 应该使用多行注释
// 接下来的有点难
// 我来解一下
// 先这样
// 然后那样
// 然后再这样
if (bol) {
    test();
}

多行注释

它以/*开始,以*/结束

var result = something + somethingElse;// somethingElse不应当为null// 好的写法
if (bol) {  

   /*
    * 这个是一个多行注释
    * 这个是第二行
    */
    test();
}

// 不好的写法: 注释前没有空行
if (bol) {
   /*
    * 这个是一个多行注释
    * 这个是第二行
    */
    test();
}

// 不好的写法: 星号后没有空格
if (bol) {  

   /*
    *这个是一个多行注释
    *这个是第二行
    */
    test();
}

// 不好的写法: 错误的缩进
if (bol) {  

/*
 *这个是一个多行注释
 *这个是第二行
 */
    test();
}

// 不好的写法: 行尾不适合使用多行注释
var result = something + somethingElse; /* somethingElse不应当为null */

使用注释

何时添加注释是程序员经常讨论的一个话题. 一种同行的指导原则是,当代码不够清晰的时候添加注释,而当代码很明了的时候不应当添加注释.

// 不好的写法
// 初始化count
var count = 10;

// 好的写法
// 改变这个值可能会让它变成青蛙
var count = 10;

难于理解的代码

难于理解的代码应该加上注释.根据代码的用途,你可以用单行注释/多行注释,或者混用两种注释.关键是让其他人更容易读懂这段代码

// 好的写法
if(mode){

    /*
     * 当mode为2时(原型到原型,对象到对象),这里只递归执行一次
     * 用来执行原型到原型,对象到对象的都合并操作
     * 将会被挂起,在合适的时机执行
     */
    if(mode === 2) {
        Y.mix(...)
    }
}

可能被误认为是错误的代码

while (element && (element = element[axis])){  // 提示: 赋值操作
    if( (all || element[TAG_NAME]) && (!fn || fn(element))){
        return element;
    }
}

这个例子中,开发者在while循环控制条件中使用了一个赋值运算符.这不是一种标准的用法,并常常被检测工具认为有问题的.如果你对这个代码不熟悉,误以为是错误,加上了注释,就不会有这种误解了

浏览器特性hack

var ret = false;

if( !needle || !element || !needle[NODE_TYPE] || !element[NODE_TYPE]) {
    ret = false;
} else if (element[CONTAINS]) {
    // 如果needle不是ELEMENT_NODE时, IE和Safari 下会有错误
    if(Y.UA.opera || needle[NODE_TYPE] === 1){
        ret = element[CONTAINS](needle);
    }else{
        ret = Y_DOM._bruteContains(element, needle);
    }
}
// ....省略

文档注释

从技术的角度讲, 文档注释并不是JavaScript的组成部分,但它们是一种普遍的实践

/*
* 这个函数是用来测试文档注释的
* 这个函数是有几个参数
* 一个是这个,一个是哪个
* @method test
* @params {String}  一个文字
* @params {Object}  一个对象
* @return {Object}  返回一个对象
*/
var test = function (message, obj) {
    return {
        message: message,
        obj: obj
    }
}

所有的方法

  • 应当对方法,期望的参数和可能返回的返回值添加注释描叙

所有的构造函数

  • 应当对自定义类型和期望的参数添加注释描叙

所有包含文档化的对象

  • 如果一个对象包含一个或者多个附带文档注释的方法,那么这个对象也应当适当地针对文档生成工具添加文档注释
(0)

相关推荐

  • 编程语言C#基础入门-简单了解注释

    本文主要介绍了C#中注释的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧 注释,是代码中的一些"说明性文字".注释本身不会参与程序的编译和运行,仅仅供程序员阅读. 注释分为 ...

  • 老子《道德经》第二章原文、注释、解析 探索老子的智慧结晶

    原文:天下皆知美之为美,恶已:皆知善,斯不善矣. 有无之相生也,难易之相成也,长短之相刑也,高下之相盈也,音声之相和也,先后之相随,恒也. 是以圣人居无为之事,行不言之教,万物作而弗始也,为而弗志也, ...

  • 《始计》篇第二章——五事七计知胜负

    <始计>篇第二章--五事七计知胜负 从广义动量定理Fαt=MV的角度来说,优势力量是胜利的动力,劣势力量是胜利的阻力(敌人的优势就是你的劣势),二者的合外力决定胜利这个成果,合外力决定成果 ...

  • 2.4 第二章 第四节 葡萄褐斑病

    2.4 第二章 第四节 葡萄褐斑病

  • 渔家小鸥号-第二章

    剩下的几个人平时本来就话语不多,特别是这种情况,更加沉默了. 老刀疤子把目光朝着煮饭婆扫了一眼. 煮饭婆摇摇头,就更加没有主见了.她不过是跟着大伙儿讨个生而已.平时就是任劳任怨多点,纯粹当自己是多余的 ...

  • 等你,在枫树林-第二章

    "人家娃儿刚来,怕生,你得多照顾点."艾司长叮嘱道:"懂吗?" "爹,照顾他?嗯,也可以吧."艾小虹闪着狡黠的眼神看着自家爹爹问道:&quo ...

  • 地藏王-第二章

    第二章: 潜行归来  为母复仇 不知山河繁星,不知山川几何,脚下的牛皮战靴已经磨破,但是,身穿红色铠甲之人只顾朝着自己心中的圣地前往,日夜兼程,不曾有过一丝的懈怠,渴了就喝山涧的溪泉,饿了就觅林中的鸟 ...

  • 帝国宗门-第二章

    第二章 主祭师祷告祭祀完毕.就由宗族族长进行接手后续的仪式流程. 只见那比克族长约摸7旬年纪,长须鹤发,手执和主祭师同样是鹿首木质拐杖,只是此鹿首带有较为凶狠的霸气,没有一点的伶俐之感.倒是魁梧的身躯 ...

  • 战道巅峰-第二章

    回顾那件反叛事情的始末:那晚凌晨三时三刻钟,在席梦思大床上,赤膊上身.在人睡得最为深沉的时候,一阵急促的脚步声从外面传来,席梦思上的那人根据多年的直觉,预感到将有紧急任务将要出征.随即迅速的穿起衣服, ...

  • 【寸寸劫灰】第二章 青鸟不传日色斜·养虎

    青鸟不传日色斜 不远处一声轻咳,剑灵登时交头接耳. 施芷蕾到了! 这个在剑灵之中,传闻最多,最为神秘的少女,轻易不露面.剑灵作为星瀚之后,属于相当有优越感的一个少年群体,但这些优越的子弟们加起来,似乎 ...