运算符”?”前的表达式
如果一个包含二元运算符的表达式出现在三元运算符” ? : “的”?”之前,那么应该给表达式添上一对圆括号。例如:
(x >= 0) ? x : -x;
运算符”?”前的表达式
如果一个包含二元运算符的表达式出现在三元运算符” ? : “的”?”之前,那么应该给表达式添上一对圆括号。例如:
(x >= 0) ? x : -x;
返回值
设法让你的程序结构符合目的。例如:
if (booleanExpression) {
return true;
} else {
return false;
}
应该代之以如下方法:
return booleanExpression;
类似地:
if (condition) {
return x;
}
return y;
应该写做:
return (condition ? x : y);
圆括号
一般而言,在含有多种运算符的表达式中使用圆括号来避免运算符优先级问题,是个好方法。即使运算符的优先级对你而言可能很清楚,但对其他人未必如此。你不能假设别的程序员和你一样清楚运算符的优先级。
if ($a == $b && $c == $d) // 错误
if (($a == $b) && ($c == $d)) // 正确
命名空间
一个唯一命名空间的前缀总是全部小写的ASCII字母并且是一个顶级域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166标准所指定的标识国家的英文双字符代码。命名空间的后续部分根据不同机构各自内部的命名规范而不尽相同。这类命名规范可能以特定目录名的组成来区分部门(department),项目(project),机器(machine),或注册名(login names),也可以按功能模块来分类。
类属性的命名
属性命名应该以字符‘m’为前缀。
前缀‘m’后采用于类命名一致的规则。
‘m’总是在名字的开头起修饰作用,就像以‘r’开头表示引用一样。
理由
前缀’m'防止类属性和方法名发生任何冲突。你的方法名和属性名经常会很类似,特别是存取元素。
例如
class NameOneTwo
{
int $mVarAbc;
int $mErrorNumber;
String $mrName;
}
变量
除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。
变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。
char $c;
int $i;
float $myWidth;
变量赋值
避免在一个语句中给多个变量赋相同的值。它很难读懂。例如:
$fooBar.fChar = $barFoo.lchar = ‘c’; // 错误
不要将赋值运算符用在容易与相等关系运算符混淆的地方。例如:
if ($c++ = $d++) { // 错误
…
}
应该写成
if (($c++ = $d++) != 0) {
…
}
不要使用内嵌(embedded)赋值运算符试图提高运行时的效率,这是编译器的工作。例如:
$d = ($a = $b + $c) + $r; // 错误
应该写成
$a = $b + $c;
$d = $a + $r;
实例变量
大小写规则和变量名相似,除了前面需要一个下划线
int $_employeeId;
String $_name;
Customer $_customer;
常量
类常量和ANSI常量的声明,应该全部大写,单词间用下划线隔开。(尽量避免ANSI常量,容易引起错误)
static final int $MIN_WIDTH = 4;
static final int $MAX_WIDTH = 999;
static final int $GET_THE_CPU = 1;
位于for循环中作为计数器值的数字常量,除了-1,0和1之外,不应被直接写入代码。
空格
下列情况应该使用空格:
- 一个紧跟着括号的关键字应该被空格分开,例如:
while ( true ) {
…
}
注意:空格不应该置于方法名与其左括号之间。这将有助于区分关键字和方法调用。
- 空白应该位于参数列表中逗号的后面
- 所有的二元运算符,除了”.”,应该使用空格将之与操作数分开。一元操作符和操作数之间不因该加空格,比如:负号(“-”)、自增(“++”)和自减(“–”)。例如:
$a += $c + $d;
$a = ( $a + $b ) / ( $c * $d );
while ( $d++ = $s++ ) {
$n++;
}
printSize( “size is ” + $foo + “\n” );
- for语句中的表达式应该被空格分开,例如:
for (expr1; expr2; expr3)
- 强制转型后应该跟一个空格,例如:
myMethod( (byte) $aNum, (int) $x );
myMethod( (int) ($cp + 5 ), ( (int) ($i + 3)) + 1 );
函数
方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。
function run();
function runFast();
function getBackground();
通常每个方法都是执行一个动作的,所以对它的命名应该清楚的说明它是做什么的:用checkForErrors()代替errorCheck(),用dumpDataToFile()代替dataFile()。这么做也可以使功能和数据成为更可区分的物体。
有时后缀名是有用的:
Max – 含义为某实体所能赋予的最大值。
Cnt – 一个运行中的计数变量的当前值。
Key – 键值。
例如:retryMax 表示最多重试次数,retryCnt 表示当前重试次数。
有时前缀名是有用的:
is – 含义为问一个关于某样事物的问题。无论何时,当人们看到Is就会知道这是一个问题。
get – 含义为取得一个数值。
set – 含义为设定一个数值
例如:isHitRetryLimit
空行
空行将逻辑相关的代码段分隔开,以提高可读性。
下列情况应该总是使用两个空行:
- 一个源文件的两个片段(section)之间
- 类声明声明之间
下列情况应该总是使用一个空行:
- 两个方法之间
- 方法内的局部变量和方法的第一条语句之间
- 块注释或单行注释之前
- 一个方法内的两个逻辑段之间,用以提高可读性
初始化
尽量在声明局部变量的同时初始化。唯一不这么做的理由是变量的初始值依赖于某些先前发生的计算。
布局
只在代码块的开始处声明变量。(一个块是指任何被包含在大括号”{“和”}”中间的代码。)不要在首次用到该变量时才声明之。这会把注意力不集中的程序员搞糊涂,同时会妨碍代码在该作用域内的可移植性。
function myMethod() {
int $int1 = 0; // 方法块的开始
if ($condition) {
int $int2 = 0; // “if”块的开始
…
}
}
该规则的一个例外是for循环的索引变量
for (int $i = 0; i < $maxLoops; $i++) { … }
避免声明的局部变量覆盖上一级声明的变量。例如,不要在内部代码块中声明相同的变量名:
int $count;
…
function myMethod() {
if ($condition) {
int $count = 0; // 避免这种声明
…
}
…
}
switch语句
一个switch语句应该具有如下格式:
switch (condition) {
case ABC:
/* falls through */
statements;
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
每当一个case顺着往下执行时(因为没有break语句),通常应在break语句的位置添加注释。上面的示例代码中就包含注释/* falls through */。
Powered by WordPress