让代码更容易读

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.代码库越少越好

posted @ 2018-05-06 09:04  rorshach  阅读(273)  评论(0编辑  收藏  举报