美文网首页
好代码习惯,减少代码的怪味 - Part 1

好代码习惯,减少代码的怪味 - Part 1

作者: xiaojianxu | 来源:发表于2017-01-21 18:52 被阅读44次

    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');
      } 
    

    相关文章

      网友评论

          本文标题:好代码习惯,减少代码的怪味 - Part 1

          本文链接:https://www.haomeiwen.com/subject/uamwbttx.html