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

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

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

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




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

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

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

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

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

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

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

是我错了吗 ...
9415 次点击
所在节点    PHP
79 条回复
yaoyen0002
2014-11-29 23:38:59 +08:00
很简单的逻辑用三元,长的还是不要用三元了,和if else相比,我需要努力的去找?:在那里,再加上你这里面还有函数调用,就更绕了。。
让人一眼看过去,能读懂80%,或者大致掌握你的思路的和代码才是便于理解维护的,这样一个大长句子。。不好
wdd2007
2014-11-29 23:39:50 +08:00
讨厌三元嵌套。
sophymax
2014-11-29 23:58:51 +08:00
一段代码贴出来想挑毛病肯定是能挑的出来的 , php的我不好评判 , php的水平有限 , 所以我是绝对不会去把这些代码拆成好几个类的(不会用php的类是主要原因,虽然和其他语言的类差不多但也懒得去学,觉得鸡肋) , 但之前见过Java的项目经常往前jump七八次跳到一个地方 , 竟然是个接口 , 还要找不知道在哪的初始化类 , 那个初始化还是加载一个不知道在哪的xml来初始化的 ,人家还弄了个类专门去各种路径寻找这个xml , 那种情况才真的是想骂娘 , 难道Java项目(非安卓)都是这样 ? 周围人都还说这代码很有水平 , 除了过度封装过度解耦我真没看出这种代码有啥水平,不知道是我水平低还是说他们在拍领导的马屁 , 现在感觉Java程序员离开xml就没办法活一样 , 拿过来个json数据他们也会让对方转换成xml再给他
crs0910
2014-11-30 00:00:28 +08:00
感谢,才知道三元还可以嵌套着用。。。
以后写 js 会努力用上的。
evlos
2014-11-30 00:06:40 +08:00
@jedihy 效率应该没有,我搞错了
jamiesun
2014-11-30 00:11:44 +08:00
果然是垃圾代码。
PrideChung
2014-11-30 00:11:47 +08:00
我觉得三元运算符是可以提高可读性以及让代码更简练的,但前提是不能嵌套着用
ryd994
2014-11-30 00:11:57 +08:00
三元嵌套也是醉了
yuxing1171
2014-11-30 00:50:32 +08:00
三元都被你用烂了!
return a ? b ? true : false : false;
可以简单的写成 return a && b;
mkeith
2014-11-30 00:50:34 +08:00
三目运算就不要换行加嵌套了吧
otakustay
2014-11-30 00:50:51 +08:00
我觉得楼主的几个坚持基本都是反可读性的……

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

老实说觉得三元比if可读的人可能不少,但在三元中的任何一元带有多段逻辑而依旧认为提升可读性的就不多了,不信你做个调查试试……觉得嵌套三元比if可读的人会更少,不信还是做个调查试试

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

所谓可读性,不是让别人像你一样思考,而是让大部分人按照大部分人的思考逻辑可以看懂

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

基于语义拆解函数(哪怕只被调用一次)是非常常规的一种提高可读性的做法,本质是将逻辑拆解成树型,而每一个函数只体现树的一层而不再深入,通过函数的调用形成整棵树的全局,便于理清逻辑关联(只看树的整体节点分布)和逻辑细节(看每个节点的内容)

> 我在努力使用缩进增加这种断句感了 ... 看来 ... 作用还是不大呀 ...

缩进增加可读是对的,但个人认为你缩进错了……三元要可读性高就应该在?和:前后换行并缩进,而不是把一堆字符串拼接缩在一起,后面跟了个? true: false,差点就找不到?和:啊

---

对于所谓增加class会加重内存和IO,不熟悉PHP不作评论,但是真的要假设不开opcache跑程序吗?

---

最后还是那句,要让代码可(被大多数人)读,就不要有自己的“坚持”和“不能接受”,无数的“坚持”和“不能接受”可能造就一个鲁讯,但我承认我看不懂鲁讯的文章,也没有去习惯鲁讯的思路的那份追求,哪怕我是春上村树

今天你坚持嵌套三元可读性高,明天你的团队就可能来一位和你同工种同级别的坚持switch可读性高的同事,你们是想撕逼一场吗

可读性这事上,没有牛逼与不牛逼,团队里一半人认为你不行,你就是不行。比如jQuery曾经的源码就非常牛逼但各种可读性差,后来他们改了- -
bombless
2014-11-30 01:30:55 +08:00
改不了不至于= =
不过嵌套的三目运算、强行让人看另一个方法什么的倒是够呛,哈哈
xcv58
2014-11-30 01:35:25 +08:00
一堆魔术字符串,一个 && 就能解决的强行用 三目运算。 然后硬要说可读性?
branchzero
2014-11-30 04:26:08 +08:00
三目嵌套看着好晕= =
注释可有可无的说
thonatos
2014-11-30 06:40:55 +08:00


好像我写的还是很有格式的....
xmbaozi
2014-11-30 09:44:02 +08:00
醉了。lz果然老道。不过我还是觉得应该多拆行。另外很赞同49l
maddot
2014-11-30 09:52:36 +08:00
这样的代码,你自己过一月再回去看,估计都很费劲吧,连返回语句都在多处拼接字符串,真是一坨shit,不是读不读得读的问题,我根本就不会去读
efi
2014-11-30 09:59:03 +08:00
你们厂php没有规定代码风格么?还是说php无论怎么写都会变成一坨屎?
GTim
2014-11-30 10:07:02 +08:00
楼上的几位,最后怎么都变成最后一个三目运算符了..楼主一开始的初衷是把多个文件合并成一个文件。
jarlyyn
2014-11-30 11:05:55 +08:00
多建几个子函数。
每个需要注释的都放子函数内。
主函数子负责逻辑判断和体现流程。我一般都是这么做的。
不然你这代码做单元测试都没法做。

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

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

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

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

© 2021 V2EX