在这里我们着重在选择程序可使用最多的循环和分支语句上。
1、分支语句
常用的 if (conditional) else 语句;一般不建议超过三层嵌套if,如果筛选条件很多,可以使用 if (conditional) elseif else 语句;
2、循环语句
最有效率的循环: for 语句;
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 是多分支选择语句,而 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) 循环变量属于闭区间
源码缩进不仅仅使程序更美观,而且也使程序结构更清晰、易读。采用统一的Tab缩进方式
· 程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。
· { } 之内的代码块在‘{’右边数格处左对齐。
· 关键词和操作符之间加适当的空格;
· 函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别;
· 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “ >= ”、“ <= ”、“+”、“%”、“&&”、“ || ”、“<
· 一元操作符如“ ! ”、“ ~ ”、“ ++ ”、“ -- ”、“ & ”(地址运算符)等前后不加空格。
· 对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格,如 for (i=0; i<10; i++) 和 if ((a<=b) && (c<=d)) 。
· 相对独立的程序块与块之间加空行;
· 较长的语句、表达式等要分成多行书写。
· 划分出的新行要进行适应的缩进,使排版整齐,语句可读。
· 长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
· 循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。
· 若函数或过程中的参数较长,则要进行适当的划分。
· 不允许把多个短语句写在一行中,即一行只写一条语句。
· 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。
· Java/JavaScript语言是用大括号‘{’和‘}’界定一段程序块的,编写程序块时‘{’和‘}’应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
参见
<开发指南_Java编码规范>>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/715744/viewspace-202021/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/715744/viewspace-202021/