好像不自觉就写了难以维护的代码 ...

2014-11-29 21:08:16 +08:00
 Sunyanzi
今天遇到这么个事儿 ... 我自己也拿不定主意 ... 想来想去还是发帖子了 ...

起因是这样 ... 我因为不能忍线上的支付宝相关代码是官方的示例 SDK ... 所以整个重构 ...

重构完毕的代码里有这么一段 ... 用以一站式判断 PC 和 WAP 的返回值 ...




我自己觉得写的还蛮顺的 ... 延着思路就写下来了 ...

但今天在讲我重构之后的代码时 ... 大家的反应是「看不懂」「不敢改」「维护不了」 ...

我就有点心虚 ... 虽然可以强权镇压但我终归还是想知道更多人的看法 ...

诚然我可以把这段代码拆成分散在三四个文件里的五六个类 ... 然后用非常华丽的技法加载 ...

但我个人觉得那样才是没必要 ... 更加占用资源而且更加难以维护 ...

最近 V2 上也在讨论什么样的代码简单易懂 ... 赶着这阵子正好问问 ...

反正我个人就是觉得谁如果觉得我这段代码晦涩只能说明他自己 php 水平不过关 ...

是我错了吗 ...
9382 次点击
所在节点    PHP
79 条回复
bcxx
2014-11-29 21:10:57 +08:00
把最后的三目改简单点会舒服点吧= =
Sunyanzi
2014-11-29 21:15:50 +08:00
@bcxx 最后那个小三元的逻辑是两个 if 分支的三个 return ...

既然都是 return 为何还要写三次而不是把结果都写在一起 ..?
GTim
2014-11-29 21:17:09 +08:00
赞..用sublime text久了自然而然就会写的像这样..
kmvan
2014-11-29 21:19:31 +08:00
类方法多少和资源占用没必然联系吧。如果内存多占用1kb,大家都看明白,那值
evlos
2014-11-29 21:19:35 +08:00
团队合作的时候少用点三元运算符吧
herozzm
2014-11-29 21:20:35 +08:00
代码量不大,挺清晰的啊,还能接受吧
evlos
2014-11-29 21:21:04 +08:00
用三元运算符:可读性 -5 效率 +1
kankana
2014-11-29 21:22:13 +08:00
换是我拆成几个小方法, 没必要那么夸张多弄几个类...
haiyang416
2014-11-29 21:22:40 +08:00
不至于看不懂吧,
但是代码读起来不“舒畅”,就像大段中文没有断句的感觉。
GTim
2014-11-29 21:23:22 +08:00
@kmvan 如果不上缓存,多一个文件就要多一次io.
bcxx
2014-11-29 21:26:06 +08:00
@Sunyanzi 我对这种多层逻辑的做法一般都是 fast fail:那些会先不符合的部分就先 return false 掉,接下来一个再判断另外一部分的逻辑(对应你注释里面的 "then take remote ...")。这样感觉 **快速阅读** 起来的时候思路会清晰一点。

当然你认为它们逻辑上是应该在一块所以要放到几个三目里也行…… 不同人有不同习惯~
Sunyanzi
2014-11-29 21:35:44 +08:00
@kmvan 在没有额外缓存的情况下 ... 文件加载吃 io ... 类声明吃内存 ...

@evlos 为何我觉得三元比 if block 更具可读性 ..?

比如这段程序里的 $notify_id 和最后的 return ...

用三元就相当于我在明确声明之后的代码只会为这个变量赋值和决定函数返回值 ...

而且习惯我的这种思路之后再看到我用 if block 时就会潜意识的加个小心看我有什么其他操作 ...

这样难道不是很好 ..?

@kankana 对于我来说只有可复用的部分我会抽到单独的方法中 ...

我不太能接受为了语意声明函数 ... 而且也不能接受一个方法在全局中只被另外的一个地方调用 ...

@haiyang416 我在努力使用缩进增加这种断句感了 ... 看来 ... 作用还是不大呀 ...
freefcw
2014-11-29 21:38:20 +08:00
代码太长了,你确定一个函数的功能就是一个?

三目运算符是我极不愿意用的,至少三目运算符只在短小的时候我才会考虑,这么长一个完全就不具备可读性

目测这个函数至少要拆分到3个函数才具备一目了然性

1. $payinfo提取为类A应该是明智的做法
2. notify_id应该放到类A里面
3. 签名payinfo应该也要放到类A里面

最后那个正则,你自己去读一下看看一次能读懂意思么
RIcter
2014-11-29 21:41:54 +08:00
话说 PHP 有什么编码标准吗..
窝一直按照 PEP8 的标准来写的(Python 大法好

然后看菊苣们写代码都要 if ( ! ( owo ) ) 感觉..
求教 www
freefcw
2014-11-29 21:44:39 +08:00
一行代码之有一个功能,三秒钟能看懂这一行做了什么
一个函数只有一个功能,不混杂要处理更低一层逻辑的代码
bcxx
2014-11-29 21:46:34 +08:00
@RIcter psr
bcxx
2014-11-29 21:48:11 +08:00
@Sunyanzi

> 习惯我的这种思路之后...

不能赞同这种做法=,= 明明是应该只有代码在没有人在的嘛……所以我一直很不喜欢写 author 信息。真要找渣代码元凶就上 git blame 啊
ruoyu0088
2014-11-29 21:49:36 +08:00
写代码的人是先有逻辑,然后按照逻辑写代码,因此怎么写都很顺。但是不了解逻辑就读代码的人,是按照代码思考逻辑,那么这段代码就是属于很难读的那种了。
lightening
2014-11-29 21:50:09 +08:00
"谁如果觉得我这段代码晦涩只能说明他自己 php 水平不过关 ..."
可是你这段代码的作用是希望更多人看懂,还是考核对方的 php 水平呢?

我不懂 php,不过我觉得三目运算符嵌套很不好。而且你的代码看上去就一坨,感觉就很难懂。
rqrq
2014-11-29 21:55:17 +08:00
不需要拆分吧,处理下三元,对了用那样的方法给$sign赋值也容易看走眼。

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

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

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

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

© 2021 V2EX