ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 金蝶EAS BOS开发规范,也可作为java的开发规范(二)

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

原创 Linux操作系统 作者:xxjnw 时间:2008-03-11 00:37:36 0 删除 编辑
 

语句选择

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

1、分支语句

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

2、循环语句

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

if语句

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

布尔变量与零值比较

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

在Java中, bool 类型变量分配boolean值( true false ),  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

{

if (condition)

    DoSomething();

else

    DoOtherthing();

}

if (condition)

{

for (i=0; i

    DoSomething();

}

else

{

    for (i=0; 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

{

}

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编码规范>>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/715744/viewspace-202021/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-15

  • 博文量
    14
  • 访问量
    55775