写代码 if else 用的太多怎么办?

写代码 if else 用的太多怎么办? 大部分代码都用了 if 这个正常吗? 是不是比较初级呀:smiley: :smiley: :smiley: :relaxed: :smirk:

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 33

看看能不能进行归类使用 switch php8 以上可以改用 match 我也是最近才改过来的,可以省很多东西

switch

if ( in_array($order->status,[4,5,9,10])){
            switch($order->status){
                case 4:
                    $msg = '当前订单已完成,订单不可取消!';
                    break;
                case 5:
                    $msg = '取消订单已完成,不可重复取消!';
                    break;
                case 9:
                    $msg = '商品返回途中,暂时不可取消!';
                    break;
                case 10:
                    $msg = '订单商品已返还,订单不可取消!';
                    break;
                default:
                    $msg = '订单状态异常,请刷新后再试!';
            }
            return response()->json(['status'=>'error', 'code'=>1,'msg'=>$msg]);
        }

match

if (in_array($order->status,[4,5,9,10])){
            $msg = match ($order->status) {
                4 => '当前订单已完成,订单不可取消!',
                5 => '取消订单已完成,不可重复取消!',
                9 => '商品返回途中,暂时不可取消!',
                10 => '订单商品已返还,订单不可取消!',
                default => '订单状态异常,请刷新后再试!',
            };
            return response()->json(['status'=>'error', 'code'=>1,'msg'=>$msg]);
        }
2年前 评论
kiti 2年前
working (作者) 2年前
hello-bug 2年前
working (作者) 2年前
working (作者) 2年前
微加加的朋友 2年前

不可避免的时候我都是能不用 else 就不用 else, 维持正常流程的代码在最外层,根据条件直接 return

2年前 评论

设计模式,多了解一下

2年前 评论

很正常的,写多了自己就知道怎么优化了,楼上说的 switch php8 的 match 也是一种方式,有的也可以用 return、异常的方式终止向下执行减少 if 层级,楼上的 switch 的写法也还好 我一般会定义常量类用于定义各种类型啥的,比如

file

file

2年前 评论

file

2年前 评论
ncccc1 (作者) 2年前
qingshui 2年前
还不出来 2年前
ncccc1 (作者) 2年前

用数组 key => value

2年前 评论

if 嵌套的层次尽可能不要超过三层,否则代码的可读性性很差,不利为维护
if 中逻辑复杂的话 可以考虑 <多态> 重构下代码
if 中逻辑简单的话 说明你应该优化逻辑代码,比如 switch 替换 if, if 中是否有重复的判断,php 语法规则 (三联运算符等)

2年前 评论
susucool

OOP,设计模式呀。

2年前 评论
tiantian10000 (楼主) 2年前
susucool (作者) 2年前
susucool (作者) 2年前

正常啊,许多底层 composer 包内都是这么用,不信你看些知名的包。

2年前 评论

简单点的,这种

file

2年前 评论
乘马班如 2年前
markyanggang 2年前
  • if else 深度嵌套:可以往细了拆成方法,减少深度
  • if else 分支过多:可以考虑 策略模式 进行消除
  • 策略模式使用可以看下(Go 版本的) 博客:多分支 if else 消除小技巧
2年前 评论
╰ゝSakura

问这种问题,没有示例的嘛?要针对性来解答问题,泛泛而谈没意思

2年前 评论
working 2年前

常用 in_array switch match 来替代 ifelse

2年前 评论

不要优化优化优化都没代码了,怎么体现

2年前 评论
xuding
2年前 评论
sanders

我记得 10 年前有个项目经理讲师给我们培训,就提过圈复杂度的概念,计算方法很简单,建议楼主可以搜索学习。

我印象里记得他说当时给一个芬兰公司做 Java 语言开发的项目,当时的项目经理就要求函数内的代码不得超过 25 行。他跟我们讲,PHP 的代码应该更容易达到这个要求。

2年前 评论