还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
软通动力公司J__A编程规范编号ISS-STD-J__A版本:
1.0变更记录日期版本变更说明__2012-6-26在软通编码规范基础上修改李博宇、包维、李强、张本晨、沙丽沄2012-07-12在软通编码规范基础上修改李博宇、包维、李强、张本晨、沙丽沄2012-07-13在软通编码规范基础上修改李博宇、包维、李强、张本晨、沙丽沄目录TOC\o1-3\h\z1导言
51.1目的
51.2范围
51.3角色和职责
51.4术语定义52格式
62.
1.缩进
62.2间隔
72.3空行
82.4类成员的摆放顺序
82.5文件格式FileFor__t
82.6行最大长度
92.7括号93命名规则
103.1类和接口
103.2包
103.3get和set方法(属性的定义)
103.4变量11普通变量11常用对象变量11StaticFinal变量的命名11临时变量114注释
124.1要求
124.2J__aDoc说明
124.3类
134.4方法
144.5代码的自我说明155编码
165.1不要使用的结构16“do…while”16return建议,尽量避免,也可以使用16continue16break
165.2不要混合使用递增运算符和递减运算符
165.3变量初始化
175.4魔鬼数字/字符
175.5范围(scope)171导言J__a语言给了程序员充分的空间随意编写自己的代码,但也正是因为如此,一个程序员自己编写的代码往往不能被别的程序员很好的阅读和理解
1.1目的本文档旨在提供一个编码的标准,以便所有J__a代码在产生的一开始就能够在整个__团队中保持一致,从而能够更好的阅读和修改代码
1.2范围本文档适用于软通动力公司项目__团队的所有成员,为了使项目的后期维护和修改变的容易,在每个项目__中一定要遵守本文档中的规定术语定义
1.3角色和职责编码负责人本规范在具体项目中执行监督负责人通过实施Sour__Review制度,编程人员在完成自己的一个模块并提交测试前,由编码负责人进行Sour__Review,不符合本编程规约的程序一律打回,重新修改,即编码人你认为自己的程序没有任何的功能问题编码人员本规范的遵守者
1.4术语定义Logger-系统进行日志输出了类,为引用第三方(ApacheGroup)的输出类,具体用法见Log输出规范的说明2格式
2.
1.缩进所有的缩进皆为4个空格对应的括号通常在同一列的位置上例如voidfoo{whilebar0{Logger.debug;bar--;}ifoatmeal==tasty{Logger.debugOatmealisgoodandgoodforyou;}elseifoatmeal==yak{Logger.debugOatmealtasteslikesawdust;}else{Logger.debug____mepleezewhatizdisoatmeal;}switchsuckFactor{case1:Logger.debugThissucks;break;case2:Logger.debugThisreallysucks;break;default:Logger.debugwhatever;break;}}1).所有的缩进是由Spa__空格键形成的,而不是Tab键2).所有的if、while和for语句中的状态内容必须用括号括起来,就算只有一个状态ifsuperHero==theTick{Logger.debugSpoon!;}
2.2间隔1).所有的标识符都必须被空白字符包围inttheTick=5;iftheTick==5这么做唯一可能成为麻烦的是复杂的布尔分析影响了清晰度,例ifhero==theTicksidekick==arthur||sidekick==speak不如这样booleanisTickSidekick=sidekick==arthur||sidekick==speak;ifhero==theTickisTickSidekick{…}2).然而也有一些例外的情况,见下表例外情况原由正确示例错误示例方法名习惯写法是在所有方法名之后直接跟上一个左括号fooi;start;args
[0];tens[i];数组习惯写法是在所有数组名之后直接跟上一个左方括号args
[0];tens[I];args
[0];tens[i];自加、自减运算符习惯写法是在所有一元运算符前面或后面直接加上操作数++count;i--;++count;i--;造型运算符习惯写法是所有造型都不加空格MyClassv.get3;MyClassv.get3;MyClassv.get3;
2.3空行应该时不时的在各方法之间加入一些空格行来分割大段的代码;还应该在方法与方法之间加入一两行的空格行
2.4类成员的摆放顺序classOrder{
1.finalattributes
2.attributes
3.constructors
4.methods}必须保持private方法被放置在使用该方法的其他方法之上,而在构造器(constructor)之下,即使该构造器有可能调用这些private方法
2.5文件格式FileFor__tpackage必须总保持第一个出现;import其次;再次,任何非j__adoc的注释;然后是j__adoc类文件最后便是类注意一个文件File只能有一个类,内部类除外示例packagemisc;/**thisclassdoescoolstuff*@authorJoeProgrammer*/classSpa__Monkey{...}
2.6行最大长度不要让一行代码的长度超过120个字符,最好是低于80个字符如果代码开始向右延伸得很长,你就应该考虑把它分割成更多的方法
2.7括号使用括号的目的必须是在表达上不但能够标明优先顺序,而且有助于使表达更简单明了另外,如果某一段代码有可能产生歧义,也需加括号3命名规则所有的标识符只能用字母(A-Z或a-z)和数字(0-9)不能有货币符号或者其它非ASCII字符,尽量少用数字
3.1类和接口所有类和接口标识符将都使用混合格表示每个名称中的每个单词首字母必须大写,同时这个名称的首字母也必须大写;其它的字母均小写,除了缩写词之外(它们必须全部大写)示例CustomerSalesOrderTargetURLURLTarget
3.2包所有包名只能用小写字母尽量别使包名长度超过8个字符,应该避免使用多个词作为包名示例commoncorelang
3.3get和set方法(属性的定义)使用Eclipse的自动代码生成get和set方法变量不要使用前缀,变量的类型在名称后面表示,如SystemDate,后面表示类型以免生成的方法不方便使用
3.4变量
3.
4.1普通变量变量的命名应尽可能采用见名知义,基本命名规则如下变量名=变量含义(+变量后缀)后缀不一定要使用变量后缀遵循规则,定义如下
3.
4.2常用对象变量类型前缀VectorvHash__phmHashtablehtDateDateTimestampTimeCollectioncollIteratoritListLO__ect[]aryO__
3.
4.3StaticFinal变量的命名StaticFinal变量的名字应该都大写,每个单词之间用”_”连接,并且指出完整含义
3.
4.4临时变量一般临时变量没有具体的意思,所以临时变量名为临时变量名=变量前缀+(Temp或Tmp);其中有一些C语言延续下来的常见临时变量也可以接受如ijk一般用于表示一个临时整型变量4注释大部分注释尽量用//;对于所有的j__adoc的注释则用/***/;而临时对代码块进行的注释尽量用/**/使用时在Eclipse中输入/**,回车即可自动生成J__aDoc的注释格式
4.1要求
1、程序中注释行应不少程序代码行的40%;
2、类、方法、变量必须注释说明;
3、注释内容应根据客户要求的语言进行,原则上,除常量、变量、变量类型等以外的说明尽可能采用中文注释;
4.2J__aDoc说明1).J__aDoc注释将用于说明那些被其它类调用的类、属性和方法这些注释必须出现在所要说明的各项之前2).J__aDoc注释一般不会用于说明一些显而易见的方法,例如publicstaticvoid__inString[]args或publicintgetX;3).J__aDoc注释也不用于说明一些显而易见的参数,如publicvoidsetXintnewX;4).诸如servlet和EJB等那些没有被其它类调用的类,也不必加J__aDoc注释把源码上交给整个团队之前,必须先经过J__aDoc处理,并全面检查处理结果,以确定说明文字确实可读而且清楚明白如果J__aDoc注释能够在一行内写下,则格式应该象下面这样/**Usedto__rkspots*/intx;如果J__aDoc注释内容在一行内容纳不下,则其格式应该象下面这样/**Sethowmuchtogrowwhengrowthisneeded.p*__allervalueswillusuallys__ememorybutfrequent*reallocation__ytakealotoftime.p*@paramHowMuchThenumberofextraintstoallocatewhen*memoryreallocationisrequired.Valuesmustbegreaterthan*zero.p*/publicvoidsetExtraintHowMuch{……}注意HTML标签p和pre的作用p迫使一段代码进行分行,而pre…/pre则让块文字以特定的字体表现出来并且保留所有的空格字符J__aDoc还允许使用其它的HTML标签,但是禁止使用header标签(如h1h2等)你可以用b../b加黑文字,也可以用I../I使文字变为斜体注意J__aDoc把每个J__aDoc注释的第一行划分出来以用于放置内容表如何标识出这部分内容的结束边界线呢?J__aDoc定义这个标志为一个句号后跟一个空格其它如一个问号后跟一个空格或一个句号后跟一个p标签都不是结束标志如果在句号和p之间加一个空格,那么就有结束标志产生了
4.3类类的J__aDoc说明文件必须包括以下内容
(1)简要的提纲
(2)详细的描述
(3)使用该类的示例代码段
(4)用@author标签列出__注意由于J__aDoc中一个功能(feature)限制,所有示例代码的每行前面必须加入一个星号,以便保存每行的缩进例如/**Avectorclassoptimizedforworkingwithints.p*LiketheVectoro__ectex__ptratherthantrackingadynamic*arrayofpointerstodifferento__ectsthisissimplya*dynamicarrayofints.Theadvantageisspeedandmemory*s__ings.p*Example:*pre*//reportlongestlines*TextFileInf=newTextFileInblather.___;*IntVectorv=newIntVector;*intlongestLine=0;*booleandone=false;*while!done*{*Strings=f.readLine;*ifs==null*{*done=true;*}*else*{*intsLength=s.length;*ifsLengthlongestLine*{*longestLine=sLength;*}*v.appendsLength;*}*}*f.close;*Logger.debugThelongestlinesareonlinenumbers:;*forinti=0;iv.length;i++*{*ifv.geti==longestLine*{*Logger.debugi;*}*}*/pre*@authorAdamBaum*@authorJustinCase*/publicclassIntVector{……}
4.4方法方法的J__aDoc说明文档必须包含以下内容
(1)简要的提纲;
(2)详细的描述(如果有必要在简要提纲内补充说明某些内容的话);
(3)用J__aDoc的@param标签列出所有参数(如果有参数的话);
(4)用J__aDoc的@return标签返回出方法的值列表(如果需要返回值的话);
(5)用J__aDoc的@ex__ption标签列出所有异常(ex__ption)如果有异常抛出的话示例/**Getacopyofoneint.p*Retrieveanintrelativetotheindexprovided.p*@paramIndexWhichint0isthefirstint.p*@returnTheretrievedintorzeroifIndexisoutsideof
0..length.p*/publicintgetintIndex{}
4.5代码的自我说明傻子写计算机识别的程序;程序员写人识别的程序--__rtinFowlerRefactoring《提高代码的设计水平》除了要尽力用文件说明程序的复杂算法,我们还必须尽量通过多用一些标识符来使程序的算法易读这样有助于减少将来需要修改程序而不需修改说明文档而带来的麻烦/**determineifthegivenyearisaleapyear.p*TheGregoriancalendarprincipalstatesthataleapyearoccurs*everyfourthyearex__ptevery100yearsex__ptevery400*years.p*@paramyearTheyeartobetested.__kesurethisisafourdigityear!p*@returntrueifyearisaleapyear.p*/booleanisLeapYearintyear{booleany4=year%4==0;booleany100=year%100==0;booleany400=year%400==0;returny400||y4!y100;}5编码
5.1不要使用的结构
5.
1.1“do…while”不要用do…while循环用while循环
5.
1.2return建议,尽量避免,也可以使用不要在一个方法的中间使用return,return只能出现在一个方法的末尾原因在方法的中间使用return会给今后将方法拆分成几个更小的方法带来困难;而且它会迫使__者不得不为该方法考虑多于一个的出口点
5.
1.3continue决不要用continue原因continue会给将来把一个结构拆分成几个更小的结构或方法带来许多困难;而且她也会迫使__者不得不为该结构考虑多于一个的结束点
5.
1.4breakbreak只能用于转换状态(switchstatement)的控制原因在转换状态控制之外的情况下使用break,会给将来把一个结构拆分成几个更小的结构或方法带来许多困难;而且她也会迫使__者不得不为该结构考虑多于一个的结束点
5.2不要混合使用递增运算符和递减运算符不要混合使用递增运算符和递减运算符,原因在方法调用或是数学运算中混合使用递增运算符(或递减运算符)会造成欠经验的程序员阅读的困难,他们也许会让你重写代码的所以,最好在递增运算符(或递减运算符)之间加上额外的行
5.3变量初始化最好总是在每个变量出现的时候就马上进行初始化最好只在需要的时候再声明(declare)一个变量,不然的话会影响代码的执行效果示例intsecondWide=12;intfirstWide=doFoo20secondWide;doBarfirstWidesecondWide;inttotalWide=firstWide+secondWide;//很好!
5.4魔鬼数字/字符程序中应尽可能少使用数字/字符,尽可能定义静态变量来说明该数字/字符的含义,程序中需要赋值或比较时,使用前面定义的静态变量以下情况例外循环控制;
5.5范围(scope)原则上类的成员变量必须是总是private,尽量少用protected和public,但以下情况例外内部类的成员变量(可以为public);子类可继承的基类成员变量(可以为protected);并发控制中的__变量(可以为public)。