一个工作了 6 年的同事写的代码,不看 git 记录我还以为是实习生写的

2020-09-27 09:58:01 +08:00
 garlics

第一次见到那么离谱的代码,完全没有封装的意思。

        if ($config['theme'] == 1) {
            if ($config['plugin']['PG_SHOPPING_CART']) {
                $tabIndex = [
                    'index' => 0,
                    'collection' => 1,
                    'bestforyou' => 2,
                    'cart' => 3,
                    'mine' => 4
                ];
                $tablist = [
                    [
                        'pagePath' => '/pages/index/index',
                        'text' => '首页',
                        'iconPath' => '/assets/images/home_unactived.png',
                        'selectedIconPath' => '/assets/images/theme1_home_actived.png',
                    ],
                    [
                        "pagePath" => "/pages/collection/collection",
                        "iconPath" => "/assets/images/collection.png",
                        "selectedIconPath" => "/assets/images/collection_actived.png",
                        "text" => "收藏"
                    ],
                    [
                        "pagePath" => "/pages/bestforyou/bestforyou",
                        "iconPath" => "/assets/images/bestforyou_unactived.png",
                        "selectedIconPath" => "/assets/images/bestforyou_actived.png",
                        "text" => "为你优选"
                    ],
                    [
                        'pagePath' => '/pages/cart/cart',
                        'text' => '购物车',
                        'iconPath' => '/assets/images/cart_unactived.png',
                        'selectedIconPath' => '/assets/images/cart_actived.png',
                    ],
                    [
                        'pagePath' => '/pages/mine/mine',
                        'text' => '我的',
                        'iconPath' => '/assets/images/mine_unactived.png',
                        'selectedIconPath' => '/assets/images/mine_actived.png',
                    ]
                ];
            } else {
                $tabIndex = [
                    'index' => 0,
                    'collection' => 1,
                    'bestforyou' => 2,
                    'mine' => 3
                ];
                $tablist = [
                    [
                        'pagePath' => '/pages/index/index',
                        'text' => '首页',
                        'iconPath' => '/assets/images/home_unactived.png',
                        'selectedIconPath' => '/assets/images/theme1_home_actived.png',
                    ],
                    [
                        "pagePath" => "/pages/collection/collection",
                        "iconPath" => "/assets/images/collection.png",
                        "selectedIconPath" => "/assets/images/collection_actived.png",
                        "text" => "收藏"
                    ],
                    [
                        "pagePath" => "/pages/bestforyou/bestforyou",
                        "iconPath" => "/assets/images/bestforyou_unactived.png",
                        "selectedIconPath" => "/assets/images/bestforyou_actived.png",
                        "text" => "为你优选"
                    ],
                    [
                        'pagePath' => '/pages/mine/mine',
                        'text' => '我的',
                        'iconPath' => '/assets/images/mine_unactived.png',
                        'selectedIconPath' => '/assets/images/mine_actived.png',
                    ]
                ];
            }
        } else {
            if ($config['plugin']['PG_SHOPPING_CART']) {
                $tabIndex = [
                    'index' => 0,
                    'cart' => 1,
                    'mine' => 2
                ];
                $tablist = [
                    [
                        'pagePath' => '/pages/index/index',
                        'text' => '首页',
                        'iconPath' => '/assets/images/home_unactived.png',
                        'selectedIconPath' => '/assets/images/home_actived.png',
                    ],
                    [
                        'pagePath' => '/pages/cart/cart',
                        'text' => '购物车',
                        'iconPath' => '/assets/images/cart_unactived.png',
                        'selectedIconPath' => '/assets/images/cart_actived.png',
                    ],
                    [
                        'pagePath' => '/pages/mine/mine',
                        'text' => '我的',
                        'iconPath' => '/assets/images/mine_unactived.png',
                        'selectedIconPath' => '/assets/images/mine_actived.png',
                    ]
                ];
            } else {
                $tabIndex = [
                    'index' => 0,
                    'mine' => 1
                ];
                $tablist = [
                    [
                        'pagePath' => '/pages/index/index',
                        'text' => '首页',
                        'iconPath' => '/assets/images/home_unactived.png',
                        'selectedIconPath' => '/assets/images/home_actived.png',
                    ],
                    [
                        'pagePath' => '/pages/mine/mine',
                        'text' => '我的',
                        'iconPath' => '/assets/images/mine_unactived.png',
                        'selectedIconPath' => '/assets/images/mine_actived.png',
                    ]
                ];
            }
        }
29312 次点击
所在节点    程序员
298 条回复
tabris17
2020-09-27 10:21:49 +08:00
@sunznx PHP 就是为了快速开发,什么都想着封装一下才是有病。

这里的代码明显就是当作 DSL 使用的,还封装个毛线
Joexjx
2020-09-27 10:22:09 +08:00
这代码只是看起来不高级,实际比较通俗易懂,没必要为了看上去高级,就对 ifelse 等有深仇大恨之类的
Immortal
2020-09-27 10:22:48 +08:00
除了$tablist 没提出去复用,和 theme == 1 这种没有可读性的代码,其他都中规中矩没问题
sagaxu
2020-09-27 10:24:02 +08:00
你以为他是手写的,可能他是脚本生成。

然后,老板偷偷看新增代码行数的时候,他产出远比你高。
northisland
2020-09-27 10:24:15 +08:00
作者喷的是
if cond1
if cond2
.... // 处理 1
else
... // 处理 2
else
if cond2
... // 处理 3
else
... // 处理 4
endif


请问怎么优化?这样把嵌套 if 条件写在一起,会扁平一点?

if cond1 and cond2:
.... // 处理 1
elif cond1 and not cond2:
... // 处理 2
elif not cond1 and cond2:
... // 处理 3
elif not cond1 and not cond2:
... // 处理 4


楼主说一下优化思路呗 @garlics
mlxj
2020-09-27 10:24:15 +08:00
贼鸡儿清晰💯分
garlics
2020-09-27 10:24:18 +08:00
不知道为什么不能 append,说写得好的各位,现在有个需求,根据$config['plugin']['PG_CATEGORY'],增加一个
[
"pagePath" => "*",
"iconPath" => "*",
"selectedIconPath" => "*",
"text" => "*"
],
请告诉我怎么加?
songyijie
2020-09-27 10:24:31 +08:00
@garlics 所以会不会一开始也没那么多判断, 后来需求加的
luhe
2020-09-27 10:26:08 +08:00
我一直以为,封装是别的地方也需要用到才封装,一个地方封来封去的感觉有点浪费时间...(可能说得不对,大佬可以指点一下...
baosiqing
2020-09-27 10:26:09 +08:00
写出这样的代码为啥还有觉得好的?我见过不止这样写,还不会格式化的,看他代码经常要研究某个括号是和哪个一起的
leo108
2020-09-27 10:26:34 +08:00
确实比较惊讶这么多人可以接受这样的代码。

楼主的优化方案也不算过度封装,实现成本也就几分钟,即使未来有个别特殊需求也能简单地兼容。
hauzi
2020-09-27 10:28:04 +08:00
应该不是一次写完的,功能都是慢慢堆砌的,你觉得到了需要优化的地步,就可以优化,这就是程序开发的正常过程。
leo108
2020-09-27 10:28:33 +08:00
有些人说是工作 x 年只不过是一年的经验用了 x 年
wupher
2020-09-27 10:31:30 +08:00
如果是我的话,可能会抽象成对象,然后把现有数据转换成一个静态对象,或者直接丢到数据库表 /Cache 中。

但我觉得 3 楼说得可能更在理,没准儿这代码就是他用数据库或者模板直接生成的。
myon
2020-09-27 10:32:12 +08:00
冗余代码太多,如果有 review 的话过不了。好在逻辑清晰,我不会 php 都能看懂
tsingke
2020-09-27 10:33:55 +08:00
坐等楼主贴出来,自己优化后的代码,那些不贴自己的代码,光喷别人代码的人,一律当做傻逼处理。
steven_yue
2020-09-27 10:33:57 +08:00
这不就是优化后的结果吗?你写成函数,包成类,最后编译器还不是给你打开了。兄弟是高手
kera0a
2020-09-27 10:35:42 +08:00
“第一次见到那么离谱的代码” ???

楼主可能💩山见少了,你贴的代码一眼就看明白了,逻辑简单和他处也没啥耦合,这种代码不会出什么问题。
不能说离谱,只能说不优雅

真正离谱的代码是
1 你看都看不明白
2 等你看明白了,你也不敢改
3 等你捋完了敢改了,你也不能确保会不会有 bug
4 产生 bug 了,你也不知道是什么原因
5 知道原因了 goto 1
ll1615
2020-09-27 10:37:21 +08:00
我觉得楼主的优化就很好,有些人就是喜欢复制粘贴
myon
2020-09-27 10:41:19 +08:00
另外你优化后的代码有 bug,首页的 selectedIconPath 是跟随 theme 变化的,看到这点我大概理解他这么写的原因了,要提取出来代码会比较绕

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/710808

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX