var isOperate_BangDing = false;
var isOperate_ShuaXin = false;
if ("bangDing".equalsIgnoreCase(operateName))
{
isOperate_BangDing = true;
}
else if ("shuaXin".equalsIgnoreCase(operateName))
{
isOperate_ShuaXin = true;
}
if (isOperate_BangDing == true
|| isOperate_ShuaXin == true) {...
1
Leviathann 2022-05-11 09:48:59 +08:00 10
废话文学家
|
2
Aliberter OP 明明 3 行就写清楚的事,愣是啰嗦了十几行,给我整无语了
var isOperate_BangDing = "bangDing".equalsIgnoreCase(operateName); var isOperate_ShuaXin = "shuaXin".equalsIgnoreCase(operateName); if (isOperate_BangDing || isOperate_ShuaXin) |
3
Aliberter OP @Leviathann 精辟
|
4
bugFactory 2022-05-11 09:55:23 +08:00
为什么要设两个变量,直接 if ("bangDing".equalsIgnoreCase(operateName) || "shuaXin".equalsIgnoreCase(operateName)) {
} 不行么? |
6
cmdOptionKana 2022-05-11 09:56:39 +08:00 2
英语不太好,但就这点代码体现不出水平高低,他只是选择了非常 verbose 的表达方式而已。好处是看到这句
if (isOperate_BangDing == true || isOperate_ShuaXin == true) {... 的时候很舒服,比挤在一起看起来舒服多了。 |
7
JKeita 2022-05-11 09:57:33 +08:00
变量名风格也看得难受
|
8
spicecch 2022-05-11 09:58:07 +08:00
谁写的,刁他啊
|
9
happinessnch 2022-05-11 09:58:22 +08:00 8
这段代码不管多烂,也体现不出什么。
提出这个问题的人要想一下,为什么要纠结这个事情。 |
10
cpstar 2022-05-11 09:58:34 +08:00 4
一行变七行,这 KPI ,杠杠的
|
11
liangkang1436 2022-05-11 10:02:42 +08:00 via Android 2
你实话实说,你们公司,是不是把代码量考虑进绩效里面了
|
12
aneostart173 2022-05-11 10:05:30 +08:00
@bugFactory 你那样每次都要算一次 equalsIgnoreCase
|
13
Cu635 2022-05-11 10:05:45 +08:00
看工作量的考评方式。
如果工作量考核是用的代码行数或者代码大小(毕竟一个字符要占用一个字节嘛),那么这个代码就是优秀的。 |
14
cpstar 2022-05-11 10:07:49 +08:00
正经应该:
let operators = ['bangDing','shuaXin']; if (operators.includes(operateName)) { 当然了,这里边没办法解决大小写的问题,可以再写一个大小写转换的 func |
15
BreadKiller 2022-05-11 10:10:38 +08:00 2
我只吐槽一下 英文和拼音最好不要混着写
|
16
theqiang 2022-05-11 10:11:24 +08:00 via Android 2
不看逻辑光看这变量名,驼峰➕下划线➕拼音能把人看傻
|
17
ersic 2022-05-11 10:13:10 +08:00
没啥问题啊,写的挺清楚的。
单看这几行好像挺啰嗦,但我觉得后面 isOperate_ShuaXin 跟 isOperate_ShuaXin 还会用到的吧。 |
18
V2LIYANG 2022-05-11 10:15:15 +08:00 1
对于后来的维护者会非常友好
|
19
tbxark 2022-05-11 10:15:58 +08:00
可能一开始不是这样写的后来需求改来改去就开始摆烂打补丁了
|
20
mlhadoop 2022-05-11 10:17:40 +08:00
遇到这种问题问自己
1. 是老板不 2. 能正常跑不 3. 能发帖摸鱼不 4. 关机 |
21
Aliberter OP @bugFactory 一是可读性,二是下边的方法还要用这个变量
|
22
cht 2022-05-11 10:22:32 +08:00
linter 都过不了…
|
23
Aliberter OP @lyy16384 是完全等价的,因为不可能存在 operateName 既等于 bangDing 又等于 shuaXin
|
24
Aliberter OP @cmdOptionKana sonar 的代码规范里不允许这么写,这么写会报警
|
25
blackboom 2022-05-11 10:24:29 +08:00
精梳!这段代码越看越废话,一般人根本写不出来。
|
26
lakehylia 2022-05-11 10:24:43 +08:00
== true 是什么鬼
|
29
Aliberter OP @happinessnch 因为这是他写的代码,他现在让我去改,我看着难受,想吐槽
|
30
Aliberter OP |
34
cmdOptionKana 2022-05-11 10:39:44 +08:00
@Aliberter 领导写的,就很好理解了,几乎可以肯定他就是像写伪代码一样,既不考虑语言特性,也不综合考虑上下文,就是想到一句写一句,这样可以写得很舒服,大脑低电量模式半梦游状态就可以写了,舒舒服服写完找属下改成风格良好的代码就行,反正他自己舒服。
|
35
anonydmer 2022-05-11 10:48:03 +08:00
有没有可能他是觉得比楼主 2 楼的方法在运行时会可能少一次计算量?
|
36
pengtdyd 2022-05-11 10:50:30 +08:00
垃圾,建议进厂打螺丝!
|
37
glaucus 2022-05-11 10:50:40 +08:00
一看就不是 IDEA 写的
|
38
glaucus 2022-05-11 10:51:12 +08:00
哦才看见是前端,当我没说
|
39
AllenHua 2022-05-11 10:51:57 +08:00
告诉他下划线 underline 和小驼峰 low camel 两种风格最好不要混用,还有最好能用英文单词就不要用中文全拼……
|
41
Bronya 2022-05-11 10:53:13 +08:00
@Aliberter #30 哈哈哈,我说我看好一会在想这是啥语言,var 关键字还有 C#换行的风格,小驼峰下划线同时用,结果是 java🤣
|
42
libook 2022-05-11 10:54:45 +08:00 1
变量名 is 开头表明是布尔型,这个感觉是加分项;
驼峰+大小写取决于项目整体命名规则; 用英文还是英文拼音混合看团队约定。 else if 后面没有 else 处理异常情况,或者没有双 false 的处理情况,比如 operateName 既不是 bangDing 又不是 shuaXin 是否需要处理。 因为 operateName 只能有一个确定的值,虽然不一定 bangDing 或 shuaXin ,所以给两个变量赋值的部分应该是可以简化的。 下面 if 判断 true 的情况,可以直接判断变量,不需要再写“== true”。 要不要把两个变量直接省略,然后把两个 equalsIgnoreCase 直接放到最下面 if 条件里,取决于下文是否还会用到这两个 equalsIgnoreCase 结果,当然 if 条件太长可读性也未必好。 |
43
laucenmi 2022-05-11 10:57:58 +08:00
又不是不能用 /狗头
|
45
huntagain2008 2022-05-11 11:04:42 +08:00 2
#2 小白反正看了几分钟硬是没看懂代码的意思,但是看了楼主的代码 2 秒就明白了意思。
|
46
Leviathann 2022-05-11 11:08:25 +08:00
@anonydmer 那也应该是
var isOperate_ShuaXin = isOperate_BangDing ? false : "shuaXin".equalsIgnoreCase(operateName) |
47
anonydmer 2022-05-11 11:09:33 +08:00
非要不考虑上下文只考虑代码行数么?
if (Stream.of("shuaXin", "bangDing").anyMatch(operateName::equalsIgnoreCase)) {} 哦,还要加个 operateName 为空的 guard 语句,两行顶天了。 |
48
bestwaytowait 2022-05-11 11:10:01 +08:00
kpi master
|
49
fredli 2022-05-11 11:10:41 +08:00
水平很差,看过的代码太少,模仿也不会
|
50
acehowxx 2022-05-11 11:20:39 +08:00 via Android
只看这 1 几行,我觉得还好吧。最后不用==true 判断,再有就是应该定义个常量进行比较而不该用魔法数。至于变量命名,英文不好没办法啦。
|
51
mara1 2022-05-11 11:27:40 +08:00
@Aliberter , C#不背这个锅,事实上在 VS 里写 C#,各种 resharper 之类的提示,跟着提示改,好多小毛病都能改掉。
|
52
Suddoo 2022-05-11 11:31:33 +08:00 via iPhone
不清楚需求,别乱动屎山,
改完,测试提一个二次引入的 bug ,那就尴尬了 |
53
Leonard 2022-05-11 11:32:58 +08:00
为什么英文和拼音混用,驼峰和下划线混用
|
54
binux 2022-05-11 11:36:34 +08:00
你们都没写过 switch...case 吗?
|
58
chenmoGnar 2022-05-11 11:47:06 +08:00
把变量定义提前摆出来不是很好的习惯吗,楼主的改进版也仅仅是把定义和计算放在了一起而已;相反我觉得把变量类型声明成 boolean 看着更舒服
|
59
sarices 2022-05-11 11:48:07 +08:00
主要是代码风格有问题
|
60
kooze 2022-05-11 11:50:12 +08:00
可能按代码量考核绩效吧
|
61
alexsunxl 2022-05-11 11:50:45 +08:00
@chenmoGnar 卧槽。 你有毒啊。if xx 里面设=true ,多写废话很好玩啊。。
|
62
cLoudvSnOw 2022-05-11 11:51:25 +08:00
也没啥问题吧。楼里说这是屎山,是没见过烂的项目还是自己写的每一句代码都优美精简犹如标准库?
|
63
TWorldIsNButThis 2022-05-11 11:54:54 +08:00 via iPhone 1
@chenmoGnar mutable 是可维护性和可读性的大忌
所有的变量声明都应该尽可能做到声明即初始化 |
64
gitgabige 2022-05-11 12:04:01 +08:00
真没想过他的文化水平这么低
|
65
diggzhang 2022-05-11 12:08:07 +08:00 1
看了一会儿才反应过来是 绑定 和 刷新。
|
66
darknoll 2022-05-11 12:22:51 +08:00
表达的意思清晰,非常好,接手的人一看就懂
|
67
zooo 2022-05-11 12:33:35 +08:00
|
68
potatowish 2022-05-11 12:33:50 +08:00 via iPhone
初学者入门水平
|
69
killva4624 2022-05-11 12:35:11 +08:00
楼主小心你的领导也上 v2
|
70
gps949 2022-05-11 12:38:23 +08:00 2
就是格式不大好(对齐不易于阅读),其他的水平非常高!
作者充分考虑到现在内存、CPU 资源冗余,用空间和时间开销,换来了代码理解复杂度和后续可扩展性的大幅提升! 试想如果写成了类似: if ( "bangDing".equalsIgnoreCase(operateName) || "shuaXin".equalsIgnoreCase(operateName) ) {... 代码文本及其逻辑被压缩后,空间和时间开销是小了,但是如果后续要利用操作名结果,每次都还要忽略大小写比较一次,就得一直抓着这个操作名变量不放,这个变量作用域就可能跨几十上百行。另外,这个变量也可能被其他函数 /方法异步修改,如果后续有些其他改动使用,还可能涉及对这个变量读写互斥操作的考虑,反观这个写法会让该次读写结果固定,后续涉及加锁仅需在这两个布尔变量取值处加锁即可。 总之,这段代码简直大神级别操作,谋虑甚远。 doge |
72
guanhui07 2022-05-11 12:45:10 +08:00
太啰嗦,命名太差 。
|
73
yolee599 2022-05-11 12:50:19 +08:00 via Android
如果要重复使用 isOperate_BangDing ,可以稍微提高一点执行效率,字符串比较是比较耗时的操作
|
74
whyzp2019 2022-05-11 12:58:09 +08:00 1
个人看法,并不排斥先定义变量并初始化之后,根据需求逻辑改变变量值并使用变量,虽然当前看来很繁琐,但是方便修改和维护,哪天 bangding 要改成啥东西,不至于漏掉某处。但是不得不说,这个命名方式,真牙疼
|
75
zhanglintc 2022-05-11 12:58:55 +08:00
肯定不算好,但是也凑合看吧,起码还是比较清楚的。
|
76
liuzhaowei55 2022-05-11 13:04:42 +08:00 via iPhone
很不爽楼主这种提问的方式,代码没有上下文,没有业务背景根本讨论不出来个啥。
这段代码编译之后完全没有啥问题,编译器自己会优化。 |
77
ytll21 2022-05-11 13:24:26 +08:00
kpi 拉满,这段代码我给 9 分,不给 10 分主要怕使人过于骄傲。
|
78
shyrock 2022-05-11 13:30:09 +08:00
这代码还行,至少不到吐槽的标准。
命名和代码结构至少是清晰的, 真恶心的是让人看不懂的代码。 |
79
7gugu 2022-05-11 13:41:05 +08:00 via iPhone
还行,凑活着用吧
|
80
chenmoGnar 2022-05-11 13:45:59 +08:00
@alexsunxl 这确实没必要,可以简化下
|
81
chenmoGnar 2022-05-11 13:52:44 +08:00
@TWorldIsNButThis 是不是简单的逻辑要做到声明即初始化;因为我看 jdk 工具包里面都在方法的开始把后面用到的变量都声明了先,后面才初始化。平时我们自己写业务代码也不会单独起一行声明一个变量,也是跟初始化一起。
|
82
zdt3476 2022-05-11 14:10:35 +08:00
别的先不说,我真的不理解把 bool 值和 true/false 比较的人到底在想啥
|
83
leexy 2022-05-11 14:40:53 +08:00
又不是不能运行😏
|
84
danieladu 2022-05-11 14:41:41 +08:00
switch(operateName.ToLower()){
case "binding": case "refresh": dosomething(); break; ... } |
85
Ben4 2022-05-11 14:54:12 +08:00
你来我办公室一趟
|
86
lujiaosama 2022-05-11 15:00:08 +08:00
看着难受, 整那么多 ifelse 做什么, 三目运算符, includes 用上三行以内搞定. 用变量名注解含义还是要的, 但是这个变量名中英文混用,驼峰下划线混用, 真的挖槽. 这种代码读起来像是实习生的面条代码, 又臭又长, 逻辑稍微多一点就要被淹没在 ifelse 的汪洋里.
|
87
hailiang88 2022-05-11 15:14:57 +08:00
这就是自己爽就行,不在乎别人的代码,写起来一点心智负担都没有
|
88
DOLLOR 2022-05-11 15:41:30 +08:00
当 value 为 bool 型的时候,if(value == true)这种写法相比 if(value)有什么好处吗?
|
89
hfl1995 2022-05-11 15:57:08 +08:00
`when{
"bangDing".equalsIgnoreCase(operateName), "shuaXin".equalsIgnoreCase(operateName)->{ } } ` |
90
hfl1995 2022-05-11 15:58:31 +08:00
`when{`
`"bangDing".equalsIgnoreCase(operateName),` `"shuaXin".equalsIgnoreCase(operateName)->{` `}` `}` |
91
DreamSaddle 2022-05-11 16:15:02 +08:00
可能是按行数计费时期留下来的代码。
|
92
UserNameisNull 2022-05-11 16:16:44 +08:00
可能是美团的?要统计代码行数?
|
93
adoal 2022-05-11 16:26:55 +08:00 1
团队有 coding style 就拿出来怼他。没有……说个捷豹。
|
94
lurenw 2022-05-11 16:32:39 +08:00
这感觉就是一种"流水账"式的写法,先 XXX 然后 XXX ,在分支不多的情况下,这种写法对后来人的维护,我觉得没啥坏处,甚至不要动脑子,比起动不动在一个 if 判断里面加入 N 个 condition 的精简代码,我更喜欢读这种。
只不过最后这个 if (isOperate_BangDing == true|| isOperate_ShuaXin == true) 有点无脑和随意了。然后这个人的命名也很随意。 |
95
wangtian2020 2022-05-11 16:36:23 +08:00
我会直接改成中文枚举值
if (onperationName == '绑定'||onperationName == '刷新') { } 还在用 var 是什么屑前端,兼容 ie ? |
96
Leviathann 2022-05-11 16:36:39 +08:00
@DOLLOR 如果是 java 的话,Boolean 可能为 null ,boolean 则不会,有时候懒得区分就直接写明 == true 了
|
97
efaun 2022-05-11 16:36:59 +08:00
这么写会降低运行效率吗, 如果不会, 就是正常水平
|
98
hackfly 2022-05-11 16:37:42 +08:00
@gps949 赞同,强语言才考虑这些,胶水语言很少看到这些考虑。不过就一段代码看不出什么来。就算是整合别人的,在整体考虑别人思路会花费较多时间
|
99
sutra 2022-05-11 16:39:14 +08:00
俩拼音,不及格。
|
100
cnrting 2022-05-11 16:52:16 +08:00
能赚钱的代码就是好代码🐶
|