V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Aliberter
V2EX  ›  程序员

公正评价,这代码什么水平

  •  
  •   Aliberter · 2022-05-11 09:46:48 +08:00 · 15008 次点击
    这是一个创建于 687 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 条附言  ·  2022-05-11 16:42:39 +08:00
    声明下是 java ,var 的用法只是因为用的是 jdk11 ,支持这样写了,但我不爱用
    151 条回复    2022-05-12 10:08:07 +08:00
    1  2  
    Leviathann
        1
    Leviathann  
       2022-05-11 09:48:59 +08:00   ❤️ 10
    废话文学家
    Aliberter
        2
    Aliberter  
    OP
       2022-05-11 09:52:05 +08:00
    明明 3 行就写清楚的事,愣是啰嗦了十几行,给我整无语了
    var isOperate_BangDing = "bangDing".equalsIgnoreCase(operateName);
    var isOperate_ShuaXin = "shuaXin".equalsIgnoreCase(operateName);
    if (isOperate_BangDing || isOperate_ShuaXin)
    Aliberter
        3
    Aliberter  
    OP
       2022-05-11 09:52:18 +08:00
    @Leviathann 精辟
    bugFactory
        4
    bugFactory  
       2022-05-11 09:55:23 +08:00
    为什么要设两个变量,直接 if ("bangDing".equalsIgnoreCase(operateName) || "shuaXin".equalsIgnoreCase(operateName)) {
    }
    不行么?
    lyy16384
        5
    lyy16384  
       2022-05-11 09:56:37 +08:00   ❤️ 14
    @Aliberter #2 原代码两个变量不会同时为 true ,跟你这个不完全等价,不了解需求哪个是对的不知道
    cmdOptionKana
        6
    cmdOptionKana  
       2022-05-11 09:56:39 +08:00   ❤️ 2
    英语不太好,但就这点代码体现不出水平高低,他只是选择了非常 verbose 的表达方式而已。好处是看到这句

    if (isOperate_BangDing == true
    || isOperate_ShuaXin == true) {...

    的时候很舒服,比挤在一起看起来舒服多了。
    JKeita
        7
    JKeita  
       2022-05-11 09:57:33 +08:00
    变量名风格也看得难受
    spicecch
        8
    spicecch  
       2022-05-11 09:58:07 +08:00
    谁写的,刁他啊
    happinessnch
        9
    happinessnch  
       2022-05-11 09:58:22 +08:00   ❤️ 8
    这段代码不管多烂,也体现不出什么。
    提出这个问题的人要想一下,为什么要纠结这个事情。
    cpstar
        10
    cpstar  
       2022-05-11 09:58:34 +08:00   ❤️ 4
    一行变七行,这 KPI ,杠杠的
    liangkang1436
        11
    liangkang1436  
       2022-05-11 10:02:42 +08:00 via Android   ❤️ 2
    你实话实说,你们公司,是不是把代码量考虑进绩效里面了
    aneostart173
        12
    aneostart173  
       2022-05-11 10:05:30 +08:00
    @bugFactory 你那样每次都要算一次 equalsIgnoreCase
    Cu635
        13
    Cu635  
       2022-05-11 10:05:45 +08:00
    看工作量的考评方式。
    如果工作量考核是用的代码行数或者代码大小(毕竟一个字符要占用一个字节嘛),那么这个代码就是优秀的。
    cpstar
        14
    cpstar  
       2022-05-11 10:07:49 +08:00
    正经应该:
    let operators = ['bangDing','shuaXin'];
    if (operators.includes(operateName)) {
    当然了,这里边没办法解决大小写的问题,可以再写一个大小写转换的 func
    BreadKiller
        15
    BreadKiller  
       2022-05-11 10:10:38 +08:00   ❤️ 2
    我只吐槽一下 英文和拼音最好不要混着写
    theqiang
        16
    theqiang  
       2022-05-11 10:11:24 +08:00 via Android   ❤️ 2
    不看逻辑光看这变量名,驼峰➕下划线➕拼音能把人看傻
    ersic
        17
    ersic  
       2022-05-11 10:13:10 +08:00
    没啥问题啊,写的挺清楚的。
    单看这几行好像挺啰嗦,但我觉得后面 isOperate_ShuaXin 跟 isOperate_ShuaXin 还会用到的吧。
    V2LIYANG
        18
    V2LIYANG  
       2022-05-11 10:15:15 +08:00   ❤️ 1
    对于后来的维护者会非常友好
    tbxark
        19
    tbxark  
       2022-05-11 10:15:58 +08:00
    可能一开始不是这样写的后来需求改来改去就开始摆烂打补丁了
    mlhadoop
        20
    mlhadoop  
       2022-05-11 10:17:40 +08:00
    遇到这种问题问自己
    1. 是老板不
    2. 能正常跑不
    3. 能发帖摸鱼不
    4. 关机
    Aliberter
        21
    Aliberter  
    OP
       2022-05-11 10:20:28 +08:00
    @bugFactory 一是可读性,二是下边的方法还要用这个变量
    cht
        22
    cht  
       2022-05-11 10:22:32 +08:00
    linter 都过不了…
    Aliberter
        23
    Aliberter  
    OP
       2022-05-11 10:23:09 +08:00   ❤️ 1
    @lyy16384 是完全等价的,因为不可能存在 operateName 既等于 bangDing 又等于 shuaXin
    Aliberter
        24
    Aliberter  
    OP
       2022-05-11 10:24:03 +08:00
    @cmdOptionKana sonar 的代码规范里不允许这么写,这么写会报警
    blackboom
        25
    blackboom  
       2022-05-11 10:24:29 +08:00
    精梳!这段代码越看越废话,一般人根本写不出来。
    lakehylia
        26
    lakehylia  
       2022-05-11 10:24:43 +08:00
    == true 是什么鬼
    Aliberter
        27
    Aliberter  
    OP
       2022-05-11 10:24:50 +08:00
    @JKeita 对 且不说这些吧 姑且可以容忍
    Aliberter
        28
    Aliberter  
    OP
       2022-05-11 10:25:08 +08:00
    @spicecch 我的领导写的 可怕不
    Aliberter
        29
    Aliberter  
    OP
       2022-05-11 10:25:31 +08:00
    @happinessnch 因为这是他写的代码,他现在让我去改,我看着难受,想吐槽
    Aliberter
        30
    Aliberter  
    OP
       2022-05-11 10:27:24 +08:00
    @cpstar
    @liangkang1436
    @Cu635
    这是我领导写的,所以不存在为了涨绩效啥的,他之前根本不会 java ,属于是现学现卖的,之前写 c#的
    Aliberter
        31
    Aliberter  
    OP
       2022-05-11 10:28:23 +08:00
    @V2LIYANG 我就是后来的维护者,我已近吐了
    Aliberter
        32
    Aliberter  
    OP
       2022-05-11 10:28:41 +08:00
    @tbxark 不是 是他一气呵成的
    Aliberter
        33
    Aliberter  
    OP
       2022-05-11 10:28:56 +08:00
    @mlhadoop 哈哈 老哥 精辟
    cmdOptionKana
        34
    cmdOptionKana  
       2022-05-11 10:39:44 +08:00
    @Aliberter 领导写的,就很好理解了,几乎可以肯定他就是像写伪代码一样,既不考虑语言特性,也不综合考虑上下文,就是想到一句写一句,这样可以写得很舒服,大脑低电量模式半梦游状态就可以写了,舒舒服服写完找属下改成风格良好的代码就行,反正他自己舒服。
    anonydmer
        35
    anonydmer  
       2022-05-11 10:48:03 +08:00
    有没有可能他是觉得比楼主 2 楼的方法在运行时会可能少一次计算量?
    pengtdyd
        36
    pengtdyd  
       2022-05-11 10:50:30 +08:00
    垃圾,建议进厂打螺丝!
    glaucus
        37
    glaucus  
       2022-05-11 10:50:40 +08:00
    一看就不是 IDEA 写的
    glaucus
        38
    glaucus  
       2022-05-11 10:51:12 +08:00
    哦才看见是前端,当我没说
    AllenHua
        39
    AllenHua  
       2022-05-11 10:51:57 +08:00
    告诉他下划线 underline 和小驼峰 low camel 两种风格最好不要混用,还有最好能用英文单词就不要用中文全拼……
    lyy16384
        40
    lyy16384  
       2022-05-11 10:52:43 +08:00
    @Aliberter #23 对 我没看清比的是同一个变量,既然领导让你改,你直接重构就行了
    Bronya
        41
    Bronya  
       2022-05-11 10:53:13 +08:00
    @Aliberter #30 哈哈哈,我说我看好一会在想这是啥语言,var 关键字还有 C#换行的风格,小驼峰下划线同时用,结果是 java🤣
    libook
        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 条件太长可读性也未必好。
    laucenmi
        43
    laucenmi  
       2022-05-11 10:57:58 +08:00
    又不是不能用 /狗头
    cheese
        44
    cheese  
       2022-05-11 11:01:13 +08:00
    @glaucus #38 这是 java ,js 没有 equalsIgnoreCase 方法
    huntagain2008
        45
    huntagain2008  
       2022-05-11 11:04:42 +08:00   ❤️ 2
    #2 小白反正看了几分钟硬是没看懂代码的意思,但是看了楼主的代码 2 秒就明白了意思。
    Leviathann
        46
    Leviathann  
       2022-05-11 11:08:25 +08:00
    @anonydmer 那也应该是
    var isOperate_ShuaXin = isOperate_BangDing ? false : "shuaXin".equalsIgnoreCase(operateName)
    anonydmer
        47
    anonydmer  
       2022-05-11 11:09:33 +08:00
    非要不考虑上下文只考虑代码行数么?

    if (Stream.of("shuaXin", "bangDing").anyMatch(operateName::equalsIgnoreCase)) {}

    哦,还要加个 operateName 为空的 guard 语句,两行顶天了。
    bestwaytowait
        48
    bestwaytowait  
       2022-05-11 11:10:01 +08:00
    kpi master
    fredli
        49
    fredli  
       2022-05-11 11:10:41 +08:00
    水平很差,看过的代码太少,模仿也不会
    acehowxx
        50
    acehowxx  
       2022-05-11 11:20:39 +08:00 via Android
    只看这 1 几行,我觉得还好吧。最后不用==true 判断,再有就是应该定义个常量进行比较而不该用魔法数。至于变量命名,英文不好没办法啦。
    mara1
        51
    mara1  
       2022-05-11 11:27:40 +08:00
    @Aliberter , C#不背这个锅,事实上在 VS 里写 C#,各种 resharper 之类的提示,跟着提示改,好多小毛病都能改掉。
    Suddoo
        52
    Suddoo  
       2022-05-11 11:31:33 +08:00 via iPhone
    不清楚需求,别乱动屎山,
    改完,测试提一个二次引入的 bug ,那就尴尬了
    Leonard
        53
    Leonard  
       2022-05-11 11:32:58 +08:00
    为什么英文和拼音混用,驼峰和下划线混用
    binux
        54
    binux  
       2022-05-11 11:36:34 +08:00
    你们都没写过 switch...case 吗?
    Aliberter
        55
    Aliberter  
    OP
       2022-05-11 11:39:49 +08:00
    @mara1 啊 对不起 没有黑 c#的意思 上边只是陈述下事情
    Aliberter
        56
    Aliberter  
    OP
       2022-05-11 11:41:16 +08:00
    @Suddoo 在屎山上开发也挺难受的
    Aliberter
        57
    Aliberter  
    OP
       2022-05-11 11:41:40 +08:00
    @Leonard 哈哈 挺逗的吧 我也没这么写过
    chenmoGnar
        58
    chenmoGnar  
       2022-05-11 11:47:06 +08:00
    把变量定义提前摆出来不是很好的习惯吗,楼主的改进版也仅仅是把定义和计算放在了一起而已;相反我觉得把变量类型声明成 boolean 看着更舒服
    sarices
        59
    sarices  
       2022-05-11 11:48:07 +08:00
    主要是代码风格有问题
    kooze
        60
    kooze  
       2022-05-11 11:50:12 +08:00
    可能按代码量考核绩效吧
    alexsunxl
        61
    alexsunxl  
       2022-05-11 11:50:45 +08:00
    @chenmoGnar 卧槽。 你有毒啊。if xx 里面设=true ,多写废话很好玩啊。。
    cLoudvSnOw
        62
    cLoudvSnOw  
       2022-05-11 11:51:25 +08:00
    也没啥问题吧。楼里说这是屎山,是没见过烂的项目还是自己写的每一句代码都优美精简犹如标准库?
    TWorldIsNButThis
        63
    TWorldIsNButThis  
       2022-05-11 11:54:54 +08:00 via iPhone   ❤️ 1
    @chenmoGnar mutable 是可维护性和可读性的大忌
    所有的变量声明都应该尽可能做到声明即初始化
    gitgabige
        64
    gitgabige  
       2022-05-11 12:04:01 +08:00
    真没想过他的文化水平这么低
    diggzhang
        65
    diggzhang  
       2022-05-11 12:08:07 +08:00   ❤️ 1
    看了一会儿才反应过来是 绑定 和 刷新。
    darknoll
        66
    darknoll  
       2022-05-11 12:22:51 +08:00
    表达的意思清晰,非常好,接手的人一看就懂
    zooo
        67
    zooo  
       2022-05-11 12:33:35 +08:00
    为啥我觉得还行呀
    挺清晰的,便于维护,就可以了,也没多出来很多没必要的代码呀

    @cpstar
    我觉得 operators 列表中如果小于等于三个,完全可以用变量代替,还便于阅读代码。

    大于三个可以这样
    potatowish
        68
    potatowish  
       2022-05-11 12:33:50 +08:00 via iPhone
    初学者入门水平
    killva4624
        69
    killva4624  
       2022-05-11 12:35:11 +08:00
    楼主小心你的领导也上 v2
    gps949
        70
    gps949  
       2022-05-11 12:38:23 +08:00   ❤️ 2
    就是格式不大好(对齐不易于阅读),其他的水平非常高!
    作者充分考虑到现在内存、CPU 资源冗余,用空间和时间开销,换来了代码理解复杂度和后续可扩展性的大幅提升!
    试想如果写成了类似:
    if ( "bangDing".equalsIgnoreCase(operateName) || "shuaXin".equalsIgnoreCase(operateName) )
    {...

    代码文本及其逻辑被压缩后,空间和时间开销是小了,但是如果后续要利用操作名结果,每次都还要忽略大小写比较一次,就得一直抓着这个操作名变量不放,这个变量作用域就可能跨几十上百行。另外,这个变量也可能被其他函数 /方法异步修改,如果后续有些其他改动使用,还可能涉及对这个变量读写互斥操作的考虑,反观这个写法会让该次读写结果固定,后续涉及加锁仅需在这两个布尔变量取值处加锁即可。

    总之,这段代码简直大神级别操作,谋虑甚远。

    doge
    Damn
        71
    Damn  
       2022-05-11 12:43:22 +08:00
    @cpstar 面向行数 KPI 编程。
    guanhui07
        72
    guanhui07  
       2022-05-11 12:45:10 +08:00
    太啰嗦,命名太差 。
    yolee599
        73
    yolee599  
       2022-05-11 12:50:19 +08:00 via Android
    如果要重复使用 isOperate_BangDing ,可以稍微提高一点执行效率,字符串比较是比较耗时的操作
    whyzp2019
        74
    whyzp2019  
       2022-05-11 12:58:09 +08:00   ❤️ 1
    个人看法,并不排斥先定义变量并初始化之后,根据需求逻辑改变变量值并使用变量,虽然当前看来很繁琐,但是方便修改和维护,哪天 bangding 要改成啥东西,不至于漏掉某处。但是不得不说,这个命名方式,真牙疼
    zhanglintc
        75
    zhanglintc  
       2022-05-11 12:58:55 +08:00
    肯定不算好,但是也凑合看吧,起码还是比较清楚的。
    liuzhaowei55
        76
    liuzhaowei55  
       2022-05-11 13:04:42 +08:00 via iPhone
    很不爽楼主这种提问的方式,代码没有上下文,没有业务背景根本讨论不出来个啥。
    这段代码编译之后完全没有啥问题,编译器自己会优化。
    ytll21
        77
    ytll21  
       2022-05-11 13:24:26 +08:00
    kpi 拉满,这段代码我给 9 分,不给 10 分主要怕使人过于骄傲。
    shyrock
        78
    shyrock  
       2022-05-11 13:30:09 +08:00
    这代码还行,至少不到吐槽的标准。
    命名和代码结构至少是清晰的,
    真恶心的是让人看不懂的代码。
    7gugu
        79
    7gugu  
       2022-05-11 13:41:05 +08:00 via iPhone
    还行,凑活着用吧
    chenmoGnar
        80
    chenmoGnar  
       2022-05-11 13:45:59 +08:00
    @alexsunxl 这确实没必要,可以简化下
    chenmoGnar
        81
    chenmoGnar  
       2022-05-11 13:52:44 +08:00
    @TWorldIsNButThis 是不是简单的逻辑要做到声明即初始化;因为我看 jdk 工具包里面都在方法的开始把后面用到的变量都声明了先,后面才初始化。平时我们自己写业务代码也不会单独起一行声明一个变量,也是跟初始化一起。
    zdt3476
        82
    zdt3476  
       2022-05-11 14:10:35 +08:00
    别的先不说,我真的不理解把 bool 值和 true/false 比较的人到底在想啥
    leexy
        83
    leexy  
       2022-05-11 14:40:53 +08:00
    又不是不能运行😏
    danieladu
        84
    danieladu  
       2022-05-11 14:41:41 +08:00
    switch(operateName.ToLower()){
    case "binding":
    case "refresh":
    dosomething();
    break;
    ...
    }
    Ben4
        85
    Ben4  
       2022-05-11 14:54:12 +08:00
    你来我办公室一趟
    lujiaosama
        86
    lujiaosama  
       2022-05-11 15:00:08 +08:00
    看着难受, 整那么多 ifelse 做什么, 三目运算符, includes 用上三行以内搞定. 用变量名注解含义还是要的, 但是这个变量名中英文混用,驼峰下划线混用, 真的挖槽. 这种代码读起来像是实习生的面条代码, 又臭又长, 逻辑稍微多一点就要被淹没在 ifelse 的汪洋里.
    hailiang88
        87
    hailiang88  
       2022-05-11 15:14:57 +08:00
    这就是自己爽就行,不在乎别人的代码,写起来一点心智负担都没有
    DOLLOR
        88
    DOLLOR  
       2022-05-11 15:41:30 +08:00
    当 value 为 bool 型的时候,if(value == true)这种写法相比 if(value)有什么好处吗?
    hfl1995
        89
    hfl1995  
       2022-05-11 15:57:08 +08:00
    `when{
    "bangDing".equalsIgnoreCase(operateName),
    "shuaXin".equalsIgnoreCase(operateName)->{

    }

    }
    `
    hfl1995
        90
    hfl1995  
       2022-05-11 15:58:31 +08:00
    `when{`
    `"bangDing".equalsIgnoreCase(operateName),`
    `"shuaXin".equalsIgnoreCase(operateName)->{`

    ​ `}`

    `}`
    DreamSaddle
        91
    DreamSaddle  
       2022-05-11 16:15:02 +08:00
    可能是按行数计费时期留下来的代码。
    UserNameisNull
        92
    UserNameisNull  
       2022-05-11 16:16:44 +08:00
    可能是美团的?要统计代码行数?
    adoal
        93
    adoal  
       2022-05-11 16:26:55 +08:00   ❤️ 1
    团队有 coding style 就拿出来怼他。没有……说个捷豹。
    lurenw
        94
    lurenw  
       2022-05-11 16:32:39 +08:00
    这感觉就是一种"流水账"式的写法,先 XXX 然后 XXX ,在分支不多的情况下,这种写法对后来人的维护,我觉得没啥坏处,甚至不要动脑子,比起动不动在一个 if 判断里面加入 N 个 condition 的精简代码,我更喜欢读这种。

    只不过最后这个 if (isOperate_BangDing == true|| isOperate_ShuaXin == true) 有点无脑和随意了。然后这个人的命名也很随意。
    wangtian2020
        95
    wangtian2020  
       2022-05-11 16:36:23 +08:00
    我会直接改成中文枚举值

    if (onperationName == '绑定'||onperationName == '刷新') {

    }

    还在用 var 是什么屑前端,兼容 ie ?
    Leviathann
        96
    Leviathann  
       2022-05-11 16:36:39 +08:00
    @DOLLOR 如果是 java 的话,Boolean 可能为 null ,boolean 则不会,有时候懒得区分就直接写明 == true 了
    efaun
        97
    efaun  
       2022-05-11 16:36:59 +08:00
    这么写会降低运行效率吗, 如果不会, 就是正常水平
    hackfly
        98
    hackfly  
       2022-05-11 16:37:42 +08:00
    @gps949 赞同,强语言才考虑这些,胶水语言很少看到这些考虑。不过就一段代码看不出什么来。就算是整合别人的,在整体考虑别人思路会花费较多时间
    sutra
        99
    sutra  
       2022-05-11 16:39:14 +08:00
    俩拼音,不及格。
    cnrting
        100
    cnrting  
       2022-05-11 16:52:16 +08:00
    能赚钱的代码就是好代码🐶
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3457 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 11:10 · PVG 19:10 · LAX 04:10 · JFK 07:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.