1.选择具体,避免空泛,找到更有表现力的词
fetch和download要比泛泛的get好
deliver,dispatch,route,distribute要比send更加明确
2.循环结构中使用i,j,k;如果更加精确的可以使用userI或user_i(驼峰或下划线命名任选其一)
3.为变量名附加更多的信息,使其更容易读.
hexId // 十六进制id
startMs // 开始时间,单位毫秒
elapsedSecs // 消耗的时间,单位秒
4.附加额外信息
plaintextPassword //纯文本格式密码,需要加密后使用
unescapteComment //需要转义后才能使用
htmlUtf8 //已转化为utf8格式
dataUrlenc //url编码的输入数据
5.在小的作用域里可以使用简短的名字
如: TaelService $m;
6.丢掉没用的词:
convertToString() 可以替换为 toString()
7.利用名字格式来传递含义
类名大驼峰格式: ClassName
变量小驼峰: fooName
常量: CONST_NAME
8.避免歧义
如从数据库获取数据:
db->filter('year<=2017'); 这儿的filter我们不清楚是挑出符合规则的数据,还是减掉符合规则的数据.
下面的相对来讲语义更加明确
db->where('year<=2017')->get();
9.min/max(包含)表示极限
10.first/last表示包含范围
11.begin/end表示包含/排除的范围
12.给bool值命名
readPassword 是需要读取密码,还是已经读取了密码,不如needPassword只管或者userIsAuthenticated只管
给bool值加上is,has,can或should这样的词,可以使语义更加明确
13.避免使用反义词
$disableSsl = false;
应该用
$useSsl = true;
14.与使用者的期望相匹配
如使用者总是期望get和size方法不需要做过多的计算.就名字而言大部分人的理解是count比size需要更多的操作.
15.临时变量应该是对原有变量的处理后使用,否则就不要使用临时变量.
15.源代码布局一致原则:
A.使用一致的布局
B.相似的代码应该看起来一致
C.相关的代码行分组,形成代码块
16.添加额外的方法来整理不规则的东西
17.需要时使用列对齐
$rule = [
'name' => 'required|between:2,50',
'content' => 'required|between:10,500',
'limitnum' => 'required|integer|between:10,1000',
'level' => 'required|integer|between:1,500',
'img' => 'required|mimes:jpeg,bmp,png,gif|image|max:1024k'
];
18.选择一个有意义的顺序,并始终使用它.
比如html中的表单应以重要到不重要的次序来排列,其次以字母顺序来排序.php接收表单值也应该如此
$name = Input::get('name');
$age = Input::get('age');
19.if左边的值应该是变量,右边的值应该是常量
20.除非逻辑简单(比如只对条件检查就返回值), 否则就不要用三目运算符
21.在函数中提前返回,在循环中提前使用break或continue;通过提早返回来减少嵌套
22.多个if时,应该先处理正确的/简单的/有趣或可疑的情况
$age = intval($rawAge);
if ($age <= 0) {
return '年龄错误';
}
if ($age > 100) {
return '年龄错误';
}
if ($age > 0 && $age < 20) {
return '青年';
}
先处理正确的
if ($flag === true) {
.....
}
23.拆分超长的表达式,如:
if (trim(explode($rawStr, ',')[0]) === 'test') {
...
}
可以拆分为:
$users = trim(explode($rawStr, ',')[0]);
24.总结变量
if ($request->uid === $user->id) {
...
}
就可以写成:
$userOwnsDocument = ($request->uid === $user->id);
25.德摩根定理(分别取反,转换与/或):
if (! $a && ! $b && ! $c) {
}
要比下面的代码更具可读性
if (! ($a || $b || $c)) {
}
26.不要滥用短路逻辑,但以下逻辑是合理的
if($object && $object->userName) {
....
}
27.更改复杂的逻辑,变的简单优雅:
return ($begin >= $other->begin && $begin < $other->end) || ($end >= $other->begin && $end <= $other->end);
可以拆分为:
if ($other->end <= $begin) {
return false;
}
if ($other->begin >= $end) {
return false;
}
return true;
28.拆分巨大的语句:
29.减少变量,对于只出现一次的变量,不必声明.减少控制流的变量.
30.缩小变量作用域;如
class Object
{
private $str;
public function method1()
{
$this->str = '...';
$this->method2();
}
public function method2()
{
$this->str = '...';
}
}
str只有method1和method2中用到,所以应该将其缩小作用域.
class Object
{
public function method1()
{
$str = '...';
$this->method2($str);
}
public function method2($str)
{
....
}
}
31.能用静态方法就用静态方法.
32.多使用常量;只写一次的变量更好.提前返回避免中间变量.
33.积极的发现并抽取不相关的子逻辑.
34.代码一次只做一件事情
35.代码库越少越好