不管是作为后端语言的php(用java、go的别撇嘴,在我们的项目里边,php是绝对的后端),还是作为前端的js,很多早期甚至中级的开发者,都没有注意到代码逻辑层次的问题。更没有注意到的是,代码逻辑层次太多的代码,很容易买下隐患,而且可读性和可扩展性都比较差,容易形成bug。

今天审核代码的时候,遇到一个逻辑层次非常多的代码,当时就被震撼到了。不过在自己处于那个阶段的时候,何尝没有过类似的问题和烦恼呢,因此,还是分享一下如何化解其这种多逻辑层次的思路。

private function translateList($stores)
{
    $storeIds = !empty($stores['data']) ? array_column($stores['data'], 'store_id') : array();
    if ($storeIds) {
        // ...
        foreach ($stores['data'] as &$data) {
            //子账号名称
            foreach ($subacc as $k => $sub) {
                ...
            }
            foreach ($data as $key => $val) {
                if (in_array($key, $filter) && empty($val)) {
                    $data[$key] = "- -";
                }
                //区别主账号子账号,是主账号给列出来
                if ($key == "sub_count") {
                    if (!empty($val)) {
                        $data['uid_type'] = "主账号:";
                        foreach ($data['child_name'] as $child) {
                            $data['uid_type'] .= $child['uid_uname'].",";
                        }
                    } else {
                        $data['uid_type'] = "子账号";
                    }
                }
                if ($key == "sub_count") {
                    ...
                }
            }
        }
    }
    return $stores;
}

初略算了一下,最深的逻辑层次竟然达到7层。逻辑层次和空间维度差不多,每增加一个维度,信息和变数就增加指数级的变化。对于空间维度,我们最能理解的也就是3维了。实际上,对于代码的逻辑层次,要想比较顺畅地理解下来,3层也就是一个临界点了,最大的话,就得烧脑了。

那么,怎么降低代码的逻辑层次呢?我对开发人员给出了几个建议:

1. 异常流程尽早结束

比如,函数一开始就通过if来对有$stores的情况进行了判断,后面所有的逻辑都被包裹在if语句里边。事实上,反过来先写异常流程,将使代码逻辑变得一下子简单明了了。

if (!$stores) {
   return $stores;
}
// 正常逻辑

这样,大部分正常逻辑不再被嵌套在if语句里边,理解起来更加清晰。

2. 明晰逻辑层次

可以多做几次循环,每个循环做一两件事情,而不是把所有要做的事情都放到一个循环里边。
这样做的话看起来轻松,有条理;改起来很容易定位

3. 多用系统函数。

比如,下面的代码:

$data['childs_name'] = "";
foreach ($data['child_name'] as $child) {
    $data['childs_name'] .= $child['uid_uname'].",";
}

用系统函数implode即可降调一个逻辑层次:

$data['child_name'] = implode(',', $data['child_name']);

4. 对于一些复杂的逻辑算法,也可以将其抽象成函数,通过调用函数来降低逻辑层次。

通过上述行之有效的方法,降低代码层次,将使代码结构和层次更加清晰,便于理解,便于扩展。

标签: 逻辑层次, 规范

添加新评论