zhouxin / pubhg

Unlimited private code, issue and wiki hosts.

== '''JavaScript编码规范''' ==

'''1. 命名规则''' 1.1. 类名[[BR]]
规则:一个或多个单词构成,每个单词的首字母大写,其余字母小写,单词之间直接相连,没有其他符号。[[BR]]例子:[[BR]]正确的:TestClass[[BR]]错误的:Test_Class、testClass、test_class等[[BR]]

1.2. 公共方法[[BR]] 规则:一个或多个单词构成,第一个单词的所有字母均小写,其余每个单词的首字母大写,其余字母小写,单词之间直接相连,没有其他符号。[[BR]]例子:[[BR]]正确的:testMethod(), getHtml(), getXml()[[BR]]错误的:TestMethod()、test_Method()、test_method()、getHTML()、getXML()等

1.3. 全局变量[[BR]] 规则:以“g_”开头,而后由一个或多个单词构成,第一个单词的所有字母均小写,其余每个单词的首字母大写,其余字母小写,单词之间直接相连,没有其他符号。这里,第一个单词前,可使用一个缩写短语表示全局变量的类型,如果使用了类型缩写短语,那么其余所有单词的首字母均大写,其余字母小写。这里的变量类型缩写包括:[[BR]] n 表示某种节点(如XML节点、HTML节点等),如nText等[[BR]] i 表示整数的列举形式,如nValue等[[BR]] lst list类型[[BR]] s string类型[[BR]] d Date类型[[BR]] f 有小数点的数字[[BR]] b 布尔类型[[BR]] 说明:这里的全局变量指,为全局所有js文件共享的变量,不包括仅被本js文件使用的内部全局变量。例如,一个变量虽然在语法上是全局变量,但是仅在声明它的js文件内部作为全局变量使用,那么其命名规则遵循私有变量的命名规则,而不是本规则。[[BR]] 上述代表变量类型的缩写词,如果变量的类型已经可以通过变量名明确,则缩写词可以省略,如:fileName,不需要写为sFileName,除非FileName确实不是字符串类型,fileCount不需要写为iFileCount,除非FileCount确实不是整数类型。[[BR]]例子:[[BR]]正确的:g_fileName、g_lstMenuItems等[[BR]]错误的:testVar、TestVar、test_var等[[BR]]

1.4. 常量[[BR]] 规则:一个或多个单词构成,每个单词的所有字母均大写,单词之间用“_”相连。类型缩写规则同1.3.。[[BR]]例子:[[BR]]正确的:TEST_CONST[[BR]]错误的:test_const、TESTCONST等

1.5. 私有方法[[BR]] 规则:以“_”开头,一个或多个单词构成,第一个单词的所有字母均小写,其余每个单词的首字母大写,其余字母小写,单词之间直接相连,没有其他符号。[[BR]]说明:这里的私有方法指,仅供类内部调用的方法或者声明方法的js文件的内部调用的方法。[[BR]]例子:[[BR]]正确的:_testMethod()[[BR]]错误的:_TestMethod()、test_Method()、test_method()等[[BR]]

1.6. 私有变量[[BR]] 规则:以“_”开头,一个或多个单词构成,第一个单词的所有字母均小写,其余每个单词的首字母大写,其余字母小写,单词之间直接相连,没有其他符号。类型缩写规则同1.3.。[[BR]]说明:[[BR]]这里的私有变量指,仅供类内部使用的变量或者声明变量的js文件内部使用的变量。[[BR]]例子:[[BR]]正确的:_testVar[[BR]]错误的:_TestVar、test_Var、test_var等

1.7. 方法的参数[[BR]] 规则:一个或多个单词构成,第一个单词的所有字母均小写,其余每个单词的首字母大写,其余字母小写,单词之间直接相连,没有其他符号。类型缩写规则同1.3.。[[BR]]例子:[[BR]]正确的:testVar[[BR]]错误的:TestVar、test_Var、test_var等

1.8. 局部变量[[BR]] 同1.7.。

1.9. 方法命名[[BR]] 规则:方法的第一个单词必须为动词,如“set”、“get”等。[[BR]]对象的方法,如果以对象本身作为宾语,则可以省略,如:[[BR]]应写为:object.getName(),而不是object.getObjectName()等。

1.10. 单词[[BR]] 规则:所有的单词必须使用英语单词,除非没有相应的英语单词,才允许使用汉语拼音或首拼。

1.11. 缩写[[BR]] 规则:全局变量、类的公用函数、公共属性、常量一律使用单词的完整形式,而不使用首拼。[[BR]]局部变量、私有变量等如需要使用缩写,首先参照如下的单词缩写表:[[BR]] 完全拼写 缩写[[BR]] connection conn[[BR]] database db[[BR]] destination dst[[BR]] document doc[[BR]] event evt[[BR]] image img[[BR]] initialize init[[BR]] list lst[[BR]] number num (注意不要缩写为no)[[BR]] option opt[[BR]] source src[[BR]] table tbl[[BR]] 此外,可以采用如下的命名规则:[[BR]]去除除首字母外的所有元音字母,取前4个英文字母,如attribute缩写为attr。

1.12. 类名和构造函数名[[BR]] 规则:类名和构造函数名应体现类的继承规则,如:[[BR]] EventHandler[[BR]] UIEventHandler[[BR]] MouseEventHandler[[BR]]

1.13. 其他命名规则[[BR]] 规则:获取/设置类私有属性的方法,必须以get/set开头。[[BR]]布尔变量名或返回布尔变量的方法命名应使用直接的方法,并以诸如“is”、“has”、“found”、“can”开头。[[BR]]对于集合类型,必须使用复数形式作为变量名称,如lstItems等。[[BR]]表示数量的变量,结尾一律为“Count”,不要使用“Number”或者“Num”。[[BR]]简单循环变量名可使用i、j、k命名,但是如果循环变量还有一些复杂的含义,则需要使用若干单词组合成有意义的变量名。[[BR]]表示相反含义的变量名必须成对使用反义词,如:get/set、begin/end、start/stop、add/remove、insert/delete、create/destroy等。[[BR]]应避免使用表示反意的布尔变量名,如:isNotError、isNotFound等,这通常会让人的思想多转一个弯。[[BR]]

'''2. 排版''' 2.1. 缩进[[BR]] 每层缩进一律为四个空格大小,并且必须使用“TAB”而不是空格实现缩进。[[BR]]

2.2. 括号[[BR]] 使用如下的括号规则(也就是右花括号始终单独占一行):

{{{ function someMethod() {

    statement1;

    if (condition1) {
        ...
    }
    else if (condition2) {
        ...
    }
    else {
        ...
    }

    while (condition3) {

        if (condition4) {   //if、for、while等语句,即使其内部只有一条语句,也必须用花括号括起来
            continue;
        }

        if (condition5) {
            break;
        }
    }

    do {
        ...
    } while (condition6);

    switch (condition 7) {
        case A:
            s1;
            ...
            break;
        case B:
            s2;
            ...
            break;
        case C:
            s3;
            ...
            break;
        default:
            ...
    }

    try {
        sTry;
        ...
    }
    catch (exception) {
        sCatch;
        ...
    }
    finally {
        sFinally;
        ...
    }
} //someMethod

}}} [[BR]]注意上述方法中,即使if语句后只有一行语句,也需要用花括号将其括起。

2.3. 折行[[BR]] 规则:如果算术表达式较长的(超过100列),可以折行书写,每行开头为运算符,如:[[BR]]

{{{ var someVar = expression1 + expression2 + expression3; }}}

如果函数的参数列表较长的,也可折行书写,如: {{{ var someVar = someFunction( arg1, arg2, arg3); }}}

2.4. 空行[[BR]] 规则:空行每次最多保留一行。[[BR]]函数声明和函数的第一句语句间应有一个空行,如:[[BR]]
{{{ function someMethod() {

    statment;
}
循环的进入语句和循环体的第一条语句之间应有一个空行,如:
while (condition) {

    statement;
}
逻辑上紧密的语句应放在一起形成一个“语句块”,语句块之间用空行分隔开,如:
statment1;
statment2;
statment3;

statment4;
statment5;
statment6;

}}}

2.5. 空格[[BR]] 用例子说明:

{{{ a = a + 1; //每个算符之间要留空格 if (a == b) { //if和之后的(间要留空格 ... } while (condition1) { //while和之后的(间要留空格 ... } for (var i = 0; i < length; i++) { //注意for语句后的空格 ... } c = a*b + d; //高优先级的算符两边不留空格,低优先级的算符两边留空格,使得运算优先级明确 a = (d? b: c); //三元算子的操作符写法

}}}

'''3. 注释''' 3.1. 注释的首要规则[[BR]] 注释的首要规则是,先写注释,后写代码。[[BR]] 编写超过10行的代码前,必须先用块注释的方式(即/.../的形式),将需要完成的工作步骤描述清楚,然后,对工作步骤描述进行检查(检查内容见“JS代码审查表”),检查通过后才能够开始编写具体的JS语句。[[BR]]编写工作步骤描述时应注意重在描述做什么工作,而不是怎样做工作,即不要将工作步骤描述得过细。[[BR]]上述的代码行数计算,不包括空行、函数定义语句(即“function”语句)、仅包括单独花括号的行。

3.2. 注释的位置[[BR]] 块注释必须位于其所描述的代码之前。行注释(即双斜杠//的形式)位于代码行之右。

lam created at 12 years, 11 months ago