大家帮我看看,这代码是水平。。
source link: https://www.v2ex.com/t/821118
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
xption 18 小时 3 分钟前
习惯不好+逻辑不清晰,之前没人教过他
坐他边上手把手带他写几次就好了
coderluan 18 小时 2 分钟前 6
yangzzzzzz 18 小时 1 分钟前
lrs 18 小时 0 分钟前
iovekkk 17 小时 58 分钟前
YzSama 17 小时 55 分钟前
Leviathann 17 小时 55 分钟前 via iPhone
然后用的地方全都 double bang 而且不写注释。。
rationa1cuzz 17 小时 44 分钟前
sagaxu 17 小时 41 分钟前 via Android 1
zjsxwc 17 小时 39 分钟前
Kasumi20 17 小时 39 分钟前
kop1989 17 小时 26 分钟前
socketpeng 17 小时 23 分钟前
MrEatChicken 17 小时 21 分钟前
flyingyasin 17 小时 21 分钟前
freak118 17 小时 21 分钟前
DreamingCTW 17 小时 17 分钟前
if ((member2 == null && member1 != null) || !member2.equals(member1)) {
return changePartPositions(member1, member2, name, org, updateTime);
}
return false;
starsky007 17 小时 17 分钟前 via Android 3
cstj0505 17 小时 15 分钟前
liuzhaowei55 17 小时 12 分钟前 via Android 9
说实话代码降低心智负担才是真的重要
zjsxwc 17 小时 7 分钟前
但是我反倒觉得合并条件到一个 if 中去后,反而更加烦躁,逃。。
EggplantLover 17 小时 4 分钟前
DreamingCTW 17 小时 1 分钟前
vanton 16 小时 59 分钟前
这里套的也还好,不算太长。
不过最好不要这样多个 if 深层嵌套。
DreamingCTW 16 小时 57 分钟前
rming 16 小时 49 分钟前 3
return
if C:
return
return
ww940521 16 小时 47 分钟前
gps949 16 小时 45 分钟前
zhouyg 16 小时 37 分钟前
ToDyZHu 16 小时 37 分钟前
ianEros 16 小时 35 分钟前
arthas2234 16 小时 35 分钟前
包括里面的逻辑,也是越短越好,实在不能精简,就拆分成小的函数,方便阅读
善用 if-return:if(member != null) {...} => if(member == null) return;
变量名:flag ,a1 ,a2 之类的语义不清晰的就不要用了
pengtdyd 16 小时 35 分钟前
selfcreditgiving 16 小时 29 分钟前
starsky007 16 小时 27 分钟前 via Android
一起这么写就好;《重构:改善既有代码的设计》这本书有提到这个概念,交流起来也方便些。
sue0917 16 小时 23 分钟前 via Android
SheHuannn 16 小时 20 分钟前
chengkai1853 16 小时 9 分钟前
Tink 16 小时 9 分钟前 via Android
naix1573 16 小时 7 分钟前
逻辑清晰写起来快,一目了然看的明白,行数多了 KPI 还高 哈哈
CharmingCheung 16 小时 7 分钟前 1
weaponc 15 小时 48 分钟前 3
CharmingCheung 15 小时 46 分钟前
binge921 15 小时 43 分钟前
easylee 15 小时 40 分钟前
nicebird 15 小时 36 分钟前
xiaofeifei8 15 小时 30 分钟前
Nich0la5 15 小时 29 分钟前
aguesuka 15 小时 14 分钟前
第一个方法, member 也许是 memberId, 第一个方法里的 name 在第二个方法里成了 positionName, 嵌套的 if 应该该改成 &&, else if 应该合并, 多个分支执行相同的代码也应该合并.
第二个方法, if 的嵌套太多了.
设计层面
dao 层查询结果是 Map
changePartyPositions 应该拆成两个函数, 一个方法不允许 null, 另一个方法只有一个 member, 同样不允许 null.
不要返回 boolean, 而是应该抛异常
另外, updateTime 是 string 类型, 而且是参数, 最坏的可能是从前端拿到的, 而且要保存到数据库, 否则有理由怀疑 changePositions 在循环体中, 同样也很糟糕
虽然不希望和他当同事, 不过这已经算 ok 的代码了, 至少看到代码我知道他想干什么.
EscYezi 15 小时 8 分钟前 via iPhone
善用 optional ,合理使用 if 条件
abobobo 14 小时 58 分钟前
guyeu 14 小时 53 分钟前
RedBeanIce 14 小时 34 分钟前 via iPhone
daimubai 14 小时 23 分钟前
LUO12826 14 小时 23 分钟前
ColdBird 14 小时 21 分钟前
ColdBird 14 小时 19 分钟前
等这种嵌套到几十层就不说易懂了
GeekSuPro 14 小时 14 分钟前
Jooooooooo 14 小时 6 分钟前
JeffersonQin 14 小时 5 分钟前
cppgohan 13 小时 58 分钟前
weiwenhao 13 小时 57 分钟前
flag = true
if member1 == null {
flag = false
}
if positionsInfo == null {
flag = fase
}
类似这样做个取反逻辑会更加清晰呀
JeffersonQin 13 小时 47 分钟前
比方说这两天我写 dotnet 用 opencv 的 wrapper ,判空会这么写:
if (src == null)
if (src.IsDisposed)
if (src.CvPtr == IntPtr.Zero)
src.Dispose();
诚然你也可以用 goto 的写法,不过嵌套 if 在某些情况下还是更直观的
JeffersonQin 13 小时 46 分钟前
vchroc 13 小时 42 分钟前
admin7785 13 小时 37 分钟前 via iPhone
fashionash 13 小时 28 分钟前
wangyzj 13 小时 18 分钟前
member1 应该是 memberId
还有就是不至于写俩方法把
if 嵌套还好
不过我感觉既然 return 了,没必要 else 了
horizon 13 小时 5 分钟前
Akiya 12 小时 34 分钟前
if ((member2 == null && member1 != null) || (member2 != null && !member2.equals(member1))) {
return ...
}
return false
第二个代码感觉没啥问题,毕竟每一步值都是上面获取的,如果后面没有其他逻辑的话其实可以把 flag=true 改成 return true
micean 12 小时 32 分钟前
Samuelcc 12 小时 30 分钟前 via Android
kerro1990 12 小时 15 分钟前
raaaaaar 11 小时 49 分钟前 via Android
AccIdent 11 小时 47 分钟前 1
honkki 11 小时 35 分钟前
ZField 11 小时 24 分钟前
linshenqi 11 小时 18 分钟前
darkcode 11 小时 11 分钟前
zhuangzhuang1988 10 小时 53 分钟前
curoky 10 小时 23 分钟前 via Android
sprite82 9 小时 50 分钟前
miv 9 小时 31 分钟前 via Android
if 太多,判断太多。
好的代码应该是简洁明了的。
多思考抽象,把代码变简洁。
这样就直观了,出 bug 也会变少。
而不是这样,那么多 if ,一个月后你还看懂嘛
miv 9 小时 28 分钟前 via Android
imycc 9 小时 24 分钟前
leokino 9 小时 19 分钟前
liuzhaowei55 9 小时 15 分钟前 via Android
sprite82 9 小时 11 分钟前
liuzhaowei55 9 小时 8 分钟前 via Android
业务代码中这种挺常见的,我可能就是大家所不齿的那种敲代码的,用 if 把自己想要处理的场景一层层的判断下来,看起来很烂,但一眼就能看出来想要处理的数据长什么样子。
liuzhaowei55 9 小时 7 分钟前 via Android
sprite82 8 小时 58 分钟前
sprite82 8 小时 57 分钟前
learningman 7 小时 57 分钟前
liuzhaowei55 7 小时 46 分钟前
---
有的代码可能看起来很傻,你想说 nerver do this ,那你就给出一个更好的例子出来,我是属于那种代码能跑就行的那种人,逻辑简单清晰明了,过上一年半载谁来都能看得懂就很好了,不要让人盯着一行代码反应半天。
最后想说,公司的业务代码能做到逻辑严谨就很难得了,受限于自己技术,当时的业务要求,产品的设计能力,行业现状 == 一系列原因,才成就了现在的屌样子,有能力就自己上手改,不能就争取不要做压倒骆驼的那根稻草。
gvliwo 7 小时 14 分钟前
代码的话:
如果从精简的角度,确实需要优化
但是团队项目更注重的是易读性,所以并不是越精简越好.
Java 主要的目标是大型分布式,易上手.超高性能不是第一要考虑的,用一部分性能换取开发的方便才是重点,Jvm 也会优化一部分代码,至于有人说数据库用 JsonObject ,那单纯看业务需要,比如说 Redis,
曾经接手了一个烂摊子,因为纯内部环境,不需要考虑安全性,直接 js 执行 sql(甲方太恶心了,一个 sql,就算加了索引,优化了 left join ,创建了中间表等一系列手段后,依然要执行半个小时以上,我真的服了)
所以我个人认为,相比于代码的好坏, SQL 的优化好坏才能体现水平
Wh1t3zZ 7 小时 5 分钟前 1
return str1 == null? str2 == null : str1.equals(str2);
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK