好代码习惯,减少代码的怪味 - Part 1
2017-01-21 本文已影响44人
xiaojianxu
1、存在两种逻辑,或以上的判断条件,一定要添加合适的小括号。无论那种开发语言中,都应当紧紧遵守。
Bad Code
if (u != '' && u != null) {
arr.push(u);
}
Goode Code
if ((u != '') && (u != null)) {
arr.push(u);
}
2、变量命名,不要使用无意义的命名。、
(1) id 是指什么 id 呢?
(2) ids 又是什么 id 的集合呢?
function editExecutor(_this, id) {
var arr = [];
var u = $(_this).attr('bind-id');
arr.push(id);
if ((u != '') && (u != null)) {
arr.push(u);
}
var data = {};
data.ids = arr.join(',');
$('#modal-button').html(template('button_temp', data));
$('#execute').modal();
}
3、冗余的判断条件
if ($this->db->trans_status() === FALSE) {
echo json_encode(array('s'=>0,'msg'=>'修改失败'));
} else {
echo json_encode(array('s'=>1,'msg'=>'保存成功'));
}
4、封装函数的参数顺序不符合使用逻辑
(1) mysql 语句 select 格式: select field1, field2, field3, ... from tableName [+ where] [+ order by] [+ group by] 等等
(2) 封装 mysql 等数据库函数,要考虑使用习惯;
(3) 多参数,需要多考虑:常用参数,具有默认值的参数顺序;
function getData($getwhere="",$order='',$pagenum="0",$exnum="0",$table='',$fields='',$groupby='')
{
// Function's logic here
}
5、方法出口,尽可能做到唯一。
(1) 返回值,可以初始化,减少 else 部分代码。
Code #1
if ($this->db->trans_status()) {
echo json_encode(array('s'=>1,'msg'=>'保存成功'));
} else {
echo json_encode(array('s'=>0,'msg'=>'修改失败'));
}
Code#2
$return_msg = array('s' => 0, 'msg' => '');
if ($row_data) {
$return_msg = array('s' => 1, 'msg' => $row_data['executeuser']);
}
echo json_encode($return_msg);
6、行数较多的代码,要分模块。
相关的代码,合并到一起。
相似的代码,合并到一起。
function editExecutor(_this, id) {
var arr = [];
var u = $(_this).attr('bind-id');
arr.push(id);
if ((u != '') && (u != null)) {
arr.push(u);
}
var data = {};
data.ids = arr.join(',');
$('#modal-button').html(template('button_temp', data));
$('#execute').modal();
var url = "<?php echo site_url('/task/task_executor/');?>" + id;
$.post(url, {}, function (res) {
if (res.s && res.msg) {
$(".ck_task_executor").each(function () {
if ($(this).val() == res.msg) {
$(this).attr('checked', true);
return false;
}
})
} else {
$(".ck_task_executor").attr("checked", false);
}
}, 'json');
}
7、不要使用具有隐式转换的判断条件。
直接使用 == 比较字符串,如果两侧的参数不是同一类型。那么就会发生参数转换,再比较。如:$key = 0,那么 0 == "findinset" 的结果就是 true。
比较字符串应该使用 php 内置 string 函数库,strcmp(), strncmp(), strncasecmp() 等等。
foreach ($arr_where as $key => $where_value) {
if($key=='findinset'){
//echo $key;
//var_dump($key=='findinset');
//exit;
$this->db->where("1","1 AND FIND_IN_SET($where)",FALSE);
continue;
}
}
......
8、存在大量冗余的逻辑代码。
1、intval 的转换;
2、 $back_msg = array();
$back_msg['s'] = 0;
echo json_encode($data);
return ;
3、
switch (intval($has_order['comment_status']))
{
case 2:
if (intval($posts['comment_status_post']) < 3 || intval($posts['comment_status_post']) > 5) {
$back_msg = array();
$back_msg['s'] = 0;
$back_msg['msg'] = '当前已是这状态';
echo json_encode($back_msg);
return;
}
break;
case 3:
if (intval($posts['comment_status_post']) < 4 || intval($posts['comment_status_post']) > 5) {
$back_msg = array();
$back_msg['s'] = 0;
$back_msg['msg'] = '当前已是这状态';
echo json_encode($back_msg);
return;
}
break;
case 4:
if (intval($posts['comment_status_post']) != 4) {
$back_msg = array();
$back_msg['s'] = 0;
$back_msg['msg'] = '上评状态不存在';
echo json_encode($back_msg);
return;
}
break;
case 5:
if (intval($posts['comment_status_post']) != 5) {
$back_msg = array();
$back_msg['s'] = 0;
$back_msg['msg'] = '上评状态不存在';
echo json_encode($back_msg);
return;
}
break;
}
9、接口返回的响应字段不一致
if 与 else 的返回值不一致
if ($sta_info)
{
$back_data = $sta_info[0];
// 获取平台汇率
$back_data['rate'] = $this->get_rate(intval($back_data['platform_id']), $back_data['company_id']);
echo json_encode(array('s' => 1, 'data' => $back_data));
} else {
echo json_encode(array('s' => 0, 'msg' => '未找到合适的任务'));
}
10、 初始化变量的值,减少代码行数,如: if - else
变量不初始化
if ($_SESSION['user']['user_group_id'] == 2) {
$user_wh = array();
$user_wh['company_id'] = $this->company_id;
$user_wh['type'] = 2;
$users = $this->Data_model->getData($user_wh, '', 0, 0, 'user');
} else {
$users = array();
}
变量初始化
$users = array();
if ($_SESSION['user']['user_group_id'] == 2) {
$user_wh = array();
$user_wh['company_id'] = $this->company_id;
$user_wh['type'] = 2;
$users = $this->Data_model->getData($user_wh, '', 0, 0, 'user');
}