如何降低代码复杂度 作者: 灯小笼 时间: 2017-06-16 分类: 开发 不管是作为后端语言的php(用java、go的别撇嘴,在我们的项目里边,php是绝对的后端),还是作为前端的js,很多早期甚至中级的开发者,都没有注意到代码逻辑层次的问题。更没有注意到的是,代码逻辑层次太多的代码,很容易买下隐患,而且可读性和可扩展性都比较差,容易形成bug。 今天审核代码的时候,遇到一个逻辑层次非常多的代码,当时就被震撼到了。不过在自己处于那个阶段的时候,何尝没有过类似的问题和烦恼呢,因此,还是分享一下如何化解其这种多逻辑层次的思路。 ```php 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语句里边。事实上,反过来先写异常流程,将使代码逻辑变得一下子简单明了了。 ```php if (!$stores) { return $stores; } // 正常逻辑 ``` 这样,大部分正常逻辑不再被嵌套在if语句里边,理解起来更加清晰。 ## 2. 明晰逻辑层次 可以多做几次循环,每个循环做一两件事情,而不是把所有要做的事情都放到一个循环里边。 这样做的话看起来轻松,有条理;改起来很容易定位 ## 3. 多用系统函数。 比如,下面的代码: ```php $data['childs_name'] = ""; foreach ($data['child_name'] as $child) { $data['childs_name'] .= $child['uid_uname'].","; } ``` 用系统函数implode即可降调一个逻辑层次: ```php $data['child_name'] = implode(',', $data['child_name']); ``` ## 4. 对于一些复杂的逻辑算法,也可以将其抽象成函数,通过调用函数来降低逻辑层次。 通过上述行之有效的方法,降低代码层次,将使代码结构和层次更加清晰,便于理解,便于扩展。 标签: 逻辑层次, 规范