ERP软件学习及二次开发

金蝶EAS BOS开发规范,也可作为java的开发规范(二)

上一篇 / 下一篇  2008-03-11 00:37:36

 

语句选择

在这里我们着重在选择程序可使用最多的循环和分支语句上。

1、分支语句

常用的 if(conditional) else语句;一般不建议超过三层嵌套if,如果筛选条件很多,可以使用 if(conditional)  elseif  else语句;

2、循环语句

最有效率的循环:for 语句;

if语句

if语句是Java语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式写if语句。本节以“与零值比较”为例,展开讨论。

布尔变量与零值比较

· 不可将布尔变量直接与1、0进行比较。

在Java中,bool类型变量分配boolean值(truefalse), bool型和其它类型之间不能转换。

假设布尔变量名字为flag,它与零值比较的标准if语句如下:

if (flag) // 表示flag为真

if (!flag) // 表示flag为假

· 应当将整型变量用“==或“!=”直接与0比较。

假设整型变量的名字为value,它与零值比较的标准if语句如下:

if (value == 0) 

if (value != 0) 

· 不可将浮点变量用“==或“!=”与任何数字比较。

千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。

 假设浮点变量的名字为x,应当将 

if (x == 0.0)  // 隐含错误的比较

转化为 

if ((x>=-EPSINON) && (x<=EPSINON))

其中EPSINON是允许的误差(即精度)。

If语句的补充说明

程序中有时会遇到if/else/return的组合,应该将如下不良风格的程序

 if (condition) 

  return x;

 return y;

改写为

 if (condition)

 {

  return x;

 }

 else

 {

return y;

}

或者改写成更加简练的 

return (condition ? x : y);

Switch语句

switch是多分支选择语句,而if语句只有两个分支可供选择。虽然可以用嵌套的if语句来实现多分支选择,但那样的程序冗长难读。这是switch语句存在的理由。

switch语句的基本格式是:

switch (variable)

{

case value1 :  … 

break;

case value2 :  … 

break;

 

 default :   … 

break;

}

· 每个case语句的结尾不要忘了加break,否则将导致多个分支重叠(除非有意使多个分支重叠)。

· 不要忘记最后那个default分支。即使程序真的不需要default处理,也应该保留语句default : break; 这样做并非多此一举,而是为了防止别人误以为你忘了default处理。

循环语句的效率

Java循环语句中,for语句使用频率最高,while语句其次,do语句很少用。本节重点论述循环体的效率。提高循环体效率的基本办法是降低循环体的复杂性。

· 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。例如示例2-2 (b)的效率比示例2-2 (a)的高。

for (row=0; row<100; row++)

{

for ( col=0; col<5; col++ )

{

sum = sum + a[row][col];

}

}

for (col=0; col<5; col++ )

{

for (row=0; row<100; row++)

{

    sum = sum + a[row][col];

}

}

示例2-2(a) 低效率:长循环在最外层           示例2-2(b) 高效率:长循环在最内层

· 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。示例2-2 (c)的程序比示例2-2 (d)多执行了N-1次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。如果N非常大,最好采用示例2-2(d)的写法,可以提高效率。如果N非常小,两者效率差别并不明显,采用示例2-2 (c)的写法比较好,因为程序更加简洁。

for (i=0; i<N; i++)

{

if (condition)

    DoSomething();

else

    DoOtherthing();

}

if (condition)

{

for (i=0; i<N; i++)

    DoSomething();

}

else

{

    for (i=0; i<N; i++)

    DoOtherthing();

}

表2-2(c) 效率低但程序简洁                表2-2(d) 效率高但程序不简洁

· 不可在for 循环体内修改循环变量,防止for 循环失去控制。

· 建议for语句的循环控制变量的取值采用“半开半闭区间”写法。

示例2-3(a)中的x值属于半开半闭区间“0 =< x < N”,起点到终点的间隔为N,循环次数为N

示例2-3(b)中的x值属于闭区间“0 =< x <= N-1”,起点到终点的间隔为N-1,循环次数为N

相比之下,示例2-3(a)的写法更加直观,尽管两者的功能是相同的。

for (int x=0; x<N; x++)

{

}

for (int x=0; x<=N-1; x++)

{

}

示例2-3(a) 循环变量属于半开半闭区间           示例2-3(b) 循环变量属于闭区间

1.1. 缩进

源码缩进不仅仅使程序更美观,而且也使程序结构更清晰、易读。采用统一的Tab缩进方式

· 程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。

· { }之内的代码块在‘{’右边数格处左对齐。

空格

· 关键词和操作符之间加适当的空格;

· 函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别;

· 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “>=、“<=、“+”、“%”、“&&”、“||、“<<”,“^”等二元操作符的前后应当加空格。

· 一元操作符如“!、“~、“++、“--、“&(地址运算符)等前后不加空格。

· 对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for (i=0; i<10; i++)if ((a<=b) && (c<=d))

分行

· 相对独立的程序块与块之间加空行;

· 较长的语句、表达式等要分成多行书写。 

· 划分出的新行要进行适应的缩进,使排版整齐,语句可读。 

· 长表达式要在低优先级操作符处划分新行,操作符放在新行之首。 

· 循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。 

· 若函数或过程中的参数较长,则要进行适当的划分。 

· 不允许把多个短语句写在一行中,即一行只写一条语句。 

· 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。 

· Java/JavaScript语言是用大括号‘{’和‘}’界定一段程序块的,编写程序块时‘{’和‘}’应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

1.2. 注释

参见

<< 2_G_开发指南_Java编码规范>>


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 4059
  • 日志数: 37
  • 文件数: 1
  • 建立时间: 2008-02-15
  • 更新时间: 2008-03-13

RSS订阅

Open Toolbar