好代码习惯,减少代码的怪味 - 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');
  } 
上一篇下一篇

猜你喜欢

热点阅读