• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Aliberter
V2EX  ›  程序员

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

  •  
  •   Aliberter · May 11, 2022 · 18543 views
    This topic created in 1637 days ago, the information mentioned may be changed or developed.
    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) {...
    
    
    Supplement 1  ·  May 11, 2022
    声明下是 java ,var 的用法只是因为用的是 jdk11 ,支持这样写了,但我不爱用
    151 replies  •  2022-05-12 10:08:07 +08:00
    1  2  
    ❮ ❯
    Leviathann
    Leviathann
    May 11, 2022❤️10
    1
    废话文学家
    Aliberter
    Aliberter
    OP
    May 11, 2022
    2
    明明 3 行就写清楚的事,愣是啰嗦了十几行,给我整无语了
    var isOperate_BangDing = "bangDing".equalsIgnoreCase(operateName);
    var isOperate_ShuaXin = "shuaXin".equalsIgnoreCase(operateName);
    if (isOperate_BangDing || isOperate_ShuaXin)
    Aliberter
    Aliberter
    OP
    May 11, 2022
    3
    @Leviathann 精辟
    bugFactory
    bugFactory
    May 11, 2022
    4
    为什么要设两个变量,直接 if ("bangDing".equalsIgnoreCase(operateName) || "shuaXin".equalsIgnoreCase(operateName)) {
    }
    不行么?
    lyy16384
    lyy16384
    May 11, 2022❤️14
    5
    @Aliberter #2 原代码两个变量不会同时为 true ,跟你这个不完全等价,不了解需求哪个是对的不知道
    QingXuJiaZhi
    QingXuJiaZhi
    May 11, 2022❤️2
    6
    英语不太好,但就这点代码体现不出水平高低,他只是选择了非常 verbose 的表达方式而已。好处是看到这句

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

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

    else if 后面没有 else 处理异常情况,或者没有双 false 的处理情况,比如 operateName 既不是 bangDing 又不是 shuaXin 是否需要处理。

    因为 operateName 只能有一个确定的值,虽然不一定 bangDing 或 shuaXin ,所以给两个变量赋值的部分应该是可以简化的。

    下面 if 判断 true 的情况,可以直接判断变量,不需要再写“== true”。

    要不要把两个变量直接省略,然后把两个 equalsIgnoreCase 直接放到最下面 if 条件里,取决于下文是否还会用到这两个 equalsIgnoreCase 结果,当然 if 条件太长可读性也未必好。
    laucenmi
    laucenmi
    May 11, 2022
    43
    又不是不能用 /狗头
    cheese
    cheese
    May 11, 2022
    44
    @glaucus #38 这是 java ,js 没有 equalsIgnoreCase 方法
    huntagain2008
    huntagain2008
    May 11, 2022❤️2
    45
    #2 小白反正看了几分钟硬是没看懂代码的意思,但是看了楼主的代码 2 秒就明白了意思。
    Leviathann
    Leviathann
    May 11, 2022
    46
    @anonydmer 那也应该是
    var isOperate_ShuaXin = isOperate_BangDing ? false : "shuaXin".equalsIgnoreCase(operateName)
    anonydmer
    anonydmer
    May 11, 2022
    47
    非要不考虑上下文只考虑代码行数么?

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

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

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

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

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

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

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

    }

    }
    `
    FringJX
    FringJX
    May 11, 2022
    90
    `when{`
    `"bangDing".equalsIgnoreCase(operateName),`
    `"shuaXin".equalsIgnoreCase(operateName)->{`

    ​ `}`

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

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

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

    }

    还在用 var 是什么屑前端,兼容 ie ?
    Leviathann
    Leviathann
    May 11, 2022
    96
    @DOLLOR 如果是 java 的话,Boolean 可能为 null ,boolean 则不会,有时候懒得区分就直接写明 == true 了
    efaun
    efaun
    May 11, 2022
    97
    这么写会降低运行效率吗, 如果不会, 就是正常水平
    hackfly
    hackfly
    May 11, 2022
    98
    @gps949 赞同,强语言才考虑这些,胶水语言很少看到这些考虑。不过就一段代码看不出什么来。就算是整合别人的,在整体考虑别人思路会花费较多时间
    sutra
    sutra
    May 11, 2022
    99
    俩拼音,不及格。
    cnrting
    cnrting
    May 11, 2022
    100
    能赚钱的代码就是好代码🐶
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3197 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 353ms · UTC 11:06 · PVG 19:06 · LAX 03:06 · JFK 06:06
    ♥ Do have faith in what you're doing.