代码规范
来源:互联网 发布:mac clang include 编辑:程序博客网 时间:2024/06/05 20:15
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; // PREFERlongName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; // AVOID
缩进
//CONVENTIONAL INDENTATIONsomeMethod(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) { ...}//INDENT 8 SPACES TO AVOID VERY DEEP INDENTSprivate static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) { ...}
if语句的换行通常应该使用8空间规则,因为常规(4空间)缩进使内容容易被忽略。 例如:
//DON’T USE THIS INDENTATIONif ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { //BAD WRAPS doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS}//USE THIS INDENTATION INSTEADif ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt();}//OR USE THISif ((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 levelint size; // size of table
is preferred over
int level, size;
可接受的:
int level; // indentation levelint size; // size of tableObject 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++; // Correctargc++; // Correctargv++; 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);
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 规范代码
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 二叉树的非递归遍历
- MySchool第六章
- 面向对象(子父类中函数的特点-覆盖)
- 解决mysql group by和count同时使用的bug
- Qt给父widget加上styleSheet(添加背景图)而不改变子widget的styleSheet的方法
- 代码规范
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- MySQL进阶漂流记(五)
- 程序员的十个层次
- 发现App占用磁盘空间瞬间变的很大很大.想必是这个问题
- 深入理解Java虚拟机 精华总结(面试)
- ubuntu 14.04 + 32 位兼容库
- Mysql性能优化二
- .def文件如何写