代码规范

Posted 我的小侯子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码规范相关的知识,希望对你有一定的参考价值。

1、应该按功能分类

比如一私有方法,应该放在两共有方法之间,增加可读性

2、行的长度不能超过80,一般不超过70

3、当表达式不适合单个行时,请根据以下一般原则进行分解:

  • 逗号后中断。
  • 在一个运算符后中断
  • 在高级别中断,不在低级别
  • 将新行与表达式的开头对齐,与上一行的同一级别对齐。
  • 如果上述规则导致混淆代码,只需缩进8个空格。

例子:

someMethod(longExpression1, longExpression2, longExpression3,
         longExpression4, longExpression5);

不同级别:

var = someMethod1(longExpression1,
                someMethod2(longExpression2,
                          longExpression3));

括号内容不分开

longName1 = longName2 * (longName3 + longName4 - longName5)
            + 4 * longname6; // PREFER
longName1 = longName2 * (longName3 + longName4
                        - longName5) + 4 * longname6; // AVOID

缩进

//CONVENTIONAL INDENTATION
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
           Object andStillAnother) 
    ...

//INDENT 8 SPACES TO AVOID VERY DEEP INDENTS
private static synchronized horkingLongMethodName(int anArg,
        Object anotherArg, String yetAnotherArg,
        Object andStillAnother) 
    ...

if语句的换行通常应该使用8空间规则,因为常规(4空间)缩进使内容容易被忽略。 例如:

//DON’T USE THIS INDENTATION
if ((condition1 && condition2)
    || (condition3 && condition4)
    ||!(condition5 && condition6))  //BAD WRAPS
    doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS

//USE THIS INDENTATION INSTEAD
if ((condition1 && condition2)
        || (condition3 && condition4)
        ||!(condition5 && condition6)) 
    doSomethingAboutIt();

//OR USE THIS
if ((condition1 && condition2) || (condition3 && condition4)
        ||!(condition5 && condition6)) 
    doSomethingAboutIt();

可接受的三种三元表达式格式化

alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
                                 : gamma;
alpha = (aLongBooleanExpression)
        ? beta
        : gamma;

Comments(注释)

    Java程序可以有两种注释:实现注释和文档注释。实现注释是在C ++中找到的,它们是由/*...*/分隔,和//。文档注释(称为“doc注释”)是仅限Java,并由/**...*/分隔。文档注释可以提取到html文件使用javadoc工具。

    实现注释是注释掉代码或对注释的手段特定实现。文档注释意在描述代码的规范,从实现自由的角度来看,可能不一定由开发者阅读有手头的源代码。注释应用于给出代码的概述并提供其他信息不容易在代码本身。注释应该只包含信息与阅读和理解程序相关。例如,关于如何的信息相应的软件包被建立或在它所在的目录不应该被包括作为评论。

Block comments

块注释不会被格式化,(如果不想用缩进可以用文档注释)例如

/*-
 * Here is a block comment with some very special
 * formatting that I want indent(1) to ignore.
 *
 *   one
 *       two
 *           three
 */

Single-Line Comments

短注释可以出现在缩进到后面代码级别的单行上。 如果一个注释不能写在一行,它应该遵循块注释格式(见第5.1.1节)。 单行注释应该以空行开头。 这里有一个例子的单行注释在Java代码中:

if (condition) 

    /* Handle the condition. */
    ...

Trailing Comments(跟进注释)

很短的注释可以出现在与它们描述的代码相同的行上,但应该是转移得足够远,以使它们与声明分离。 如果有多个简短的评论出现在一大块代码中,它们应该缩进到同一个标签设置。例如:

if (a == 2) 
    return TRUE;              /* special case */
 else 
    return isPrime(a);        /* works only for odd a */

End-Of-Line Comments(行尾注释)

//注释分隔符可以注释掉一个完整的行或仅部分行。 它不应该连续多行用于文本注释; 然而,它可以用于连续多行注释掉代码段。

if (foo > 1) 

    // Do a double-flip.
    ...

else
    return false;         // Explain why here.


//if (bar > 1) 
//
//    // Do a triple-flip.
//    ...
//
//else
//    return false;
//

Documentation Comments(文档注释)

注意:有关注释格式的示例,请参见第18页的“Java源文件示例”这里描述。有关详细信息,请参阅“如何为Javadoc撰写文档注释”,其中包括关于文档评论标签的信息(@return,@param,@see):
http://java.sun.com/products/jdk/javadoc/writingdoccomments.html
有关doc注释和javadoc的更多详细信息,请参阅javadoc主页:
http://java.sun.com/products/jdk/javadoc/
文档注释描述Java类,接口,构造函数,方法和字段。 每个文档注释设置在注释分隔符/*…/内,每个类有一个注释,接口或成员。 这个注释应该在声明之前出现:

建议每行一个声明

int level; // indentation level
int size; // size of table

is preferred over

int level, size;

可接受的:

int     level;          // indentation level
int     size;           // size of table
Object  currentEntry;   // currently selected table entry

将声明放在块的开头。 不要等到使用时才声明变量。(for循环例外)

void myMethod() 
    int int1 = 0;       // beginning of method block

    if (condition) 
        int int2 = 0;   // beginning of "if" block
        ...
    

不要声明内部块中的相同变量名

int count;
...
myMethod() 
    if (condition) 
        int count;     // AVOID!
        ...
    
    ...

每行最多一句语句。

argv++;         // Correct
argc++;         // Correct
argv++; argc--;         // AVOID!

if语句最好加上,避免以下容易出错的形式:

if (condition) //AVOID! THIS OMITS THE BRACES   !
    statement;

避免在单个语句中将多个变量分配给相同的值。 这是很难阅读。

fooBar.fChar = barFoo.lchar = 'c'; // AVOID!

混合运算符尽量带括号,提高优先级的可读性

if (a == b && c == d)       // AVOID!
if ((a == b) && (c == d))   // USE

返回值

if (booleanExpression) 
    return true;
 else 
    return false;

可以用下边代码替换

return booleanExpression;

同理:

if (condition) 
    return x;

return y;

可以用下边代码替代

return (condition ? x : y);

以上是关于代码规范的主要内容,如果未能解决你的问题,请参考以下文章

数亿下载量的npm包被“投毒”,前端开源将如何?

800万下载量的npm包被黑客篡改,你的设备或成挖矿机;苹果上线编程一小时;广电参与5G建设;Kubernetes 1.12.3

为啥我的 Eclipse Java 包被视为文件夹?

2.1大礼包被拒解决方法

Java+Tomcat:使用已部署的 WAR 文件继续开发(手头没有源代码)

SharpPcap - 传入的数据包被丢弃