大家帮我看看,这代码是水平。。

2021-12-09 14:54:02 +08:00
 Wsdba

刚接手的一个项目,发现这个人很喜欢这样写。

19250 次点击
所在节点    Java
159 条回复
fml87
2021-12-10 04:50:12 +08:00
楼里居然有相当部分的人认为这种是好代码,这种代码习惯一两周就能堆出大几千行的屎山
xuanbg
2021-12-10 06:36:14 +08:00
if (member1 == null || member1.equals(member2)){
return false;
}

changePartyPosition(...);
xuanbg
2021-12-10 06:40:07 +08:00
@DreamingCTW 你可能看错了,数据验证逻辑应该是:member1 不能为空,且 member1 不能与 member2 相同。
ryd994
2021-12-10 07:45:41 +08:00
1 应该使用 &&
2 可以使用 fail fast pattern ,也可以使用&&

怎么说呢,可读性不好,但是实际性能没啥区别,毕竟编译器啥都能给你优化掉
snw
2021-12-10 08:23:20 +08:00
@xuanbg
如果 number1==null 且 number2!=null ,原代码是会执行 ChangePartyPosition 的,和你的代码不同。
hackk
2021-12-10 08:28:35 +08:00
请问只有我看不到 LZ 发的代码吗?
xuanbg
2021-12-10 08:32:05 +08:00
@snw 嗯嗯,这样可以简化为:
return Object.equals(member1, member2) ? false : changePartyPosition(...);
snw
2021-12-10 08:33:57 +08:00
如果业务逻辑预计一年以上不会变,那么可以尝试优化。如果预计一年以内会变化,那么楼主图中这种代码其实挺好的。

你看上面回帖的代码,至少已经有 2 位写 bug 了🐶
xuanbg
2021-12-10 08:34:40 +08:00
不过换我来写代码的话,判断 member1 是否和 member2 相同这个逻辑肯定是写在 changePartyPosition 这个方法里面的。
justest123
2021-12-10 08:37:17 +08:00
这个帖子从昨天看到今天,有个有趣的现象,有贴自己“精简”代码的,好像不是被人说逻辑写错了,就是被从其他方面挑出“问题”
逻辑易懂跟代码精简貌似不是那么好兼得(狗头(逃
justfindu
2021-12-10 08:40:07 +08:00
为什么会觉得一定要把代码合并缩进, 缩写 if 才是高端写法, 这样写法后来接手人不是能够一眼就看出逻辑吗. 这样写法整体会浪费资源吗?
lskjdfgl
2021-12-10 08:41:49 +08:00
@hackk 尝试换个梯子?
xuanbg
2021-12-10 08:43:14 +08:00
@justest123 不是,恰恰是因为楼主贴的代码表达的逻辑晦涩难明,才造成大家的理解错误。经过严密推导,逻辑其实简单到令人发指:就是判断 member1 是否和 member2 相同,相同就返回 false ,不同就执行 changePartyPosition 方法。为啥要写这么复杂,我猜是因为需要预防空抛出指针异常而已。
chenshun00
2021-12-10 09:12:46 +08:00
难道没有人想到把这几个参数聚合成一个对象,然后这些判断放到对象里边去操作么。就算后边要加参数,要改变对象行为不是很 easy
BlueCropland
2021-12-10 09:18:47 +08:00
哈哈,仿佛看了以前的自己, 堆 shi 山
BlueCropland
2021-12-10 09:18:53 +08:00
6666
pengjl
2021-12-10 09:32:48 +08:00
看到了以前的自己
steptodream
2021-12-10 09:33:46 +08:00
这个问题是普遍存在的,本质就是很难在别人眼里不是傻 x ,最典型场景开车
1109599636
2021-12-10 09:49:04 +08:00
接手重构项目的时候碰见这种代码难道不开心吗, 逻辑顺着代码就能看懂, 要是把判断逻辑合并到一行光看懂什么意思就得花好长时间,重构的时候万一没考虑全了还容易出 bug 。。。
hzw94
2021-12-10 10:07:17 +08:00
不写注释通通捶死!

拿到无效数据(null)就应该直接 return 结束代码,简介明了。不该 if..else 判空再执行。

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

https://tanronggui.xyz/t/821118

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

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

© 2021 V2EX