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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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]);
        }
1年前 评论
kiti 1年前
working (作者) 1年前
hello-bug 1年前
working (作者) 1年前
working (作者) 1年前
微加加的朋友 1年前

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

1年前 评论

设计模式,多了解一下

1年前 评论

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

file

file

1年前 评论

file

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

用数组 key => value

1年前 评论

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

1年前 评论
susucool

OOP,设计模式呀。

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

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

1年前 评论

简单点的,这种

file

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

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

1年前 评论
working 1年前

常用in_array switch match 来替代ifelse

1年前 评论

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

1年前 评论
xuding
1年前 评论
sanders

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

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

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!