一个工作了 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',
                    ]
                ];
            }
        }
29637 次点击
所在节点    程序员
298 条回复
sunziren
2020-09-27 16:38:15 +08:00
尴尬
soulmt
2020-09-27 16:43:11 +08:00
@garlics 我也挺意外的...甚至有点可怕。
prime2015
2020-09-27 16:44:29 +08:00
@reus 很多事情是守恒的,代码越优雅抽象,可读性越差
soulmt
2020-09-27 16:45:03 +08:00
@wangyzj 为什么复制粘贴的代码处理一下就成了过度封装呢?好奇。 难道封装就不能变得简单高效?这么说的话,封装那岂不是个笑话
ardenchan
2020-09-27 16:48:13 +08:00
这不就是下面的固定导航栏吗?不基本都是写死的吗?这种你还要去封装?
reus
2020-09-27 16:50:34 +08:00
@prime2015 谁和你说引入多一个抽象了?$tablist 里面那么多重复的对象,抽出来几个变量,再将变量组合成数组,不是更好读?这种 if 和对应的 else 隔了几十行的代码,居然有人说可读,可笑!
应该这样写:
$indexTab = ...
$collectionTab = ...
$bestForYouTab = ...
if ... {
if ... {
$tablist = [$indexTab, collectionTab, ...]
} else {
$tablist = ...
}
} else {
$tablist = ...
}

没有引入抽象层,但是显然更好读,而且需要改动时,也不容易出错,也不用复制粘贴

就原来那代码的水平,连不重复都没做到,谈什么抽象?
OnlyShimmer
2020-09-27 16:52:11 +08:00
我默默的打开 git 查看了我接手前同事的一个项目( vue )
https://imgchr.com/i/0kas9P
这是一份表单提交,初略估计大概有 20 几个 if 判断
这还不是最神奇的,最神奇的是他的 css 骚操作
https://imgchr.com/i/0kay1f
他是一个一个数着写的,我真不明白写一个 class 这么难吗
https://imgchr.com/i/0kBEE4
他另一个骚操作就是把省市区写到的 data 里面
吾辈楷模
Mindjet
2020-09-27 16:53:24 +08:00
感觉大部分人都没有指出「房间里的大象」。

如果看过《代码整洁之道》(豆瓣评分 8.6),就应该理解类似的说法,短函数是非常重要的,作者欣赏的函数是那种只有 2~5 行的,最多不超过 20 行。

> 函数的第一规则是要短小。第二条规则是还要更短小。我无法证明这个断言。我给不出任何证实了小函数更好的研究结果。我能说的是,近 40 年来,我写过各种不同大小的函数。我写过令人憎恶的长达 3000 行的厌物,也写过许多 100 行到 300 行的函数,我还写过 20 行到 30 行的。经过漫长的试错,经验告诉我,函数就该小。(第 3 章 函数 - 3.1 短小)
> ...
> 这个程序中每个函数都只有两行、三行或四行长。每个函数都一目了然。每个函数都只说一件事。而且,每个函数都依序把你带到下一个函数。这就是函数应该达到的短小程度!(第 3 章 函数 - 3.1 短小)

当然你也能轻松找到很多反例,这只是经验之谈,这个经验既不清晰也不严格,但这的确是部分人的想法,而且还写在书里了。我很欣赏的是这个人能很清楚的看到这一点,不清楚后续有没有实证研究。



PS:前提就是那个代码是人写的,而不是生成的,如果是的话,那可能是个很「好」的代码。
Niphor
2020-09-27 17:04:59 +08:00
我想说 要是 突然来个需求
>PC 模式 mine 显示提第一位,但是 theme==1 时 bestforyou 显示在 mine 前面
楼主的 优化版本该怎么办
NjcyNzMzNDQ3
2020-09-27 17:05:55 +08:00
改了下玩玩,不喜勿喷 QWQ

function get_open_theme_shipping_cart_data(){
$tabIndex = [
];
$tablist = [
];

return [
$tabIndex,
$tablist
];
}
function get_open_theme_shipping_cart_default_data(){

}

if ($config['theme'] == 1 && $config['plugin']['PG_SHOPPING_CART'] === true) {
list($tabIndex, $tablist) = get_open_theme_shipping_cart_data();
}
if ($config['theme'] == 1 && $config['plugin']['PG_SHOPPING_CART'] === false) {
list($tabIndex, $tablist) = get_open_theme_shipping_cart_default_data();
}
if ($config['theme'] != 1 && $config['plugin']['PG_SHOPPING_CART'] === true) {
list($tabIndex, $tablist) = xxx();
}
if ($config['theme'] != 1 && $config['plugin']['PG_SHOPPING_CART'] === false) {
list($tabIndex, $tablist) = xxx();
}
anxiousPumpkin
2020-09-27 17:06:26 +08:00
@zhangjiafan 说的是义正严辞。楼主发了一段代码让你来评论,你强行加了一大段主观臆想,你搁着演情景剧呢?💩代码就是💩代码,对自己的产出这么不负责??
NjcyNzMzNDQ3
2020-09-27 17:08:50 +08:00
@tabris17 #5 请不要黑语言,这是逻辑问题
CoderLife
2020-09-27 17:13:06 +08:00
见啥都封:
那如果我只想改:
$config['theme'] == 1)
且:
$config['plugin']['PG_SHOPPING_CART']
条件"我的"的 icon 怎么改?
wangyzj
2020-09-27 17:15:03 +08:00
@soulmt #204 我只是不建议过度封装,不是说不封装
matatabi
2020-09-27 17:21:10 +08:00
快向老板举报,把这垃圾踢出你们的公司 (¬_¬)
FaXiaoKe
2020-09-27 17:28:14 +08:00
还有时间在这里晒??

赶紧重构啊,加班加点给他全部替换了。

(¬_¬)另外,你确定是准二手代码??

保不齐是四五手代码了。。
zpfhbyx
2020-09-27 17:33:11 +08:00
@CoderLife $map = [
'index' => [
'pagePath' => '/pages/index/index',
'text' => '首页',
'iconPath' => '/assets/images/home_unactived.png',
'selectedIconPath' => '/assets/images/home_actived.png',
],
'cart' => [
'pagePath' => '/pages/cart/cart',
'text' => '购物车',
'iconPath' => '/assets/images/cart_unactived.png',
'selectedIconPath' => '/assets/images/cart_actived.png',
],
'mine' => [
'pagePath' => '/pages/mine/mine',
'text' => '我的',
'iconPath' => '/assets/images/mine_unactived.png',
'selectedIconPath' => '/assets/images/mine_actived.png',
],
'collection' => [
"pagePath" => "/pages/collection/collection",
"iconPath" => "/assets/images/collection.png",
"selectedIconPath" => "/assets/images/collection_actived.png",
"text" => "收藏"
],
'bestforyou' => [
"pagePath" => "/pages/bestforyou/bestforyou",
"iconPath" => "/assets/images/bestforyou_unactived.png",
"selectedIconPath" => "/assets/images/bestforyou_actived.png",
"text" => "为你优选"
]
];
$tabConfig = array(
'1'=>array( //theme
'PG_SHOPPING_CART'=>array(
'index' => array(),
'collection' => array(),
'bestforyou' => array(),
'cart' => array(),
'mine' => array()
),
'default'=>array(
'index' => array(),
'collection' => array(),
'bestforyou' => array(),
'mine' => array()
)
),
'default'=>array(
'PG_SHOPPING_CART'=>array(
'index' => array(),
'cart' => array(),
'mine' => array()
),
'default'=>array(
'index' => array(),
'mine' => array()
)
)
);
//$config['plugin']['PG_SHOPPING_CART'] = 'PG_SHOPPING_CART';
$themeTabConfig = $tabConfig[$config['theme']]??$tabConfig['default'];
$lastTabConfig = $themeTabConfig[$config['plugin']['PG_SHOPPING_CART']]??$themeTabConfig['default'];
foreach($lastTabConfig as $key=>$icon){
$lastTabConfig[$key] = array_merge($map[$key],$icon);
}
return $lastTabConfig;
a719031256
2020-09-27 17:33:55 +08:00
@Mindjet 我个人觉得短函数就是超级坑人的,最近在翻终端底层图形库,c 语言的代码,每个函数都很短,但 tm 的一个函数嵌套几个函数,每次梳理逻辑走着走着就找不到方向了,我忘了我上一个函数是那个了,因为打开的文件很多,标签页都要满了
wjfz
2020-09-27 17:38:41 +08:00
最怕那种抄起 IDE 一把梭,一天写完所有接口。
然后跟在后面擦屁股擦好几天。review 代码一下都能找出来十几二十个 bug 。
djoiwhud
2020-09-27 17:41:23 +08:00
@soulmt 我工作快 10 年了,啥垃圾代码没接触过,也管理了几年团队了。我连 1999 年创建的工程,交接 N 代之后连代码都交接失踪了的 PC 软件都维护过。新手最喜欢干的事情就是推翻重来,网晒代码批斗,寻求群体认可。

你所谓的维护老代码跳脚,仅仅是你自我感觉良好。长周期的项目,业务代码,正常人连读一个特殊需求的 for 循环的耐心都没有,最好全部都是这个作者批斗的那种直白代码。

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

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

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

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

© 2021 V2EX