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

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

  •  
  •   Aliberter · 2022-05-11 09:46:48 +08:00 · 15009 次点击
    这是一个创建于 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  
    nonwill
        101
    nonwill  
       2022-05-11 16:56:13 +08:00
    这还好吧,引荐去看几个高手大佬们的 fork 出来的改进项目,加简直是 shi++++山

    https://github.com/goldendict/goldendict/issues/1340#issuecomment-1123296947
    gogogo1203
        102
    gogogo1203  
       2022-05-11 16:57:36 +08:00
    1. 有些语言 var xx boolean 默认就是 false, 再指明是 false 就是废话
    2. 除非能 if else 就结算,不然一律使用 switch
    3. 统一处理 input toLowerCase, 然后再 switch, 然后直接处理各个逻辑。

    槽点实在是太多了
    Leviathann
        103
    Leviathann  
       2022-05-11 17:15:23 +08:00
    @wangtian2020 这个代码逻辑其实是反的,相当于把最后一个 else 写到了最上面,如果是经常考虑完备性的人读这个代码会感觉很不适
    dufu1991
        104
    dufu1991  
       2022-05-11 17:18:14 +08:00
    @Aliberter 可能这就是他能当领导的原因。
    oppoic
        105
    oppoic  
       2022-05-11 17:24:27 +08:00
    var a = list.Contains("a") ? true : false;

    过了很久,IDE 智能了许多,提示我这块可以优化,我才发现。
    cslive
        106
    cslive  
       2022-05-11 17:28:02 +08:00
    看到 var 和变量名以为是 javascript ,后面再看 equalsIgnoreCase 才知道是 java ,差点没认出来
    ClorisYe
        107
    ClorisYe  
       2022-05-11 17:33:52 +08:00
    这么短的代码看不出别的,就知道很容易看清楚它想表达什么意思。我认为容易理解的就是好代码。
    bthulu
        108
    bthulu  
       2022-05-11 17:37:02 +08:00
    @zdt3476 bool 跟 true 比较是有用的, 有可能你的这个对象里没有这个 bool 属性, 如果直接 if(a.b)就会出错, 而 if(a.b == true)却能整厂运行
    pkwenda
        109
    pkwenda  
       2022-05-11 17:40:59 +08:00
    我还以为是 js 重新了 String 呢

    String.prototype.equalsIgnoreCase = function(str){ return true }
    akira
        110
    akira  
       2022-05-11 17:45:39 +08:00
    挺好的啊,一目了然 不用做任何猜测。

    能运行,并且清晰的代码 就是好代码。。。
    pkwenda
        111
    pkwenda  
       2022-05-11 17:55:08 +08:00
    @nonwill #101 我没看明白你喷的点是什么,你也没喷代码写的烂啊 ,项目进度慢? 😂
    nonwill
        112
    nonwill  
       2022-05-11 18:00:18 +08:00
    @pkwenda “喷”过了,不管用
    https://github.com/goldendict/goldendict/pull/1447
    https://www.v2ex.com/t/842896

    估计几个大佬就是为了练习英语吧
    goobai
        113
    goobai  
       2022-05-11 18:28:28 +08:00 via Android
    代码跟人,一个能跑就行!再怎么好看的代码,也就那点工资
    jones2000
        114
    jones2000  
       2022-05-11 18:40:09 +08:00
    代码水平主要看是否满洲当前业务需求, 如果不满足,在漂亮的代码都是白给。其次就是可以让其他人可以看懂代码逻辑。看懂这个标准就不好说了,依据其他人的教育程度,文化水平,代码功底,业务了解程度等等.....

    满洲当前业务需求这很重要,如果需求 10 并发量, 你写了 1W 个并发量,在老板看来都一样,业务能上线了。题外话, 如果你真写了 1W 并发的,那你们老板 2 期项目怎么升级收费呢?
    encro
        115
    encro  
       2022-05-11 18:40:55 +08:00
    还不错,
    用到了防御性编程和变量命名表意,
    不亏是领导,
    应该看过代码大全之类的。

    差的是对语言不熟悉。
    Kamiyu0087
        116
    Kamiyu0087  
       2022-05-11 18:43:47 +08:00
    我觉得能一眼就看明白的代码也不算太差吧😂
    UIXX
        117
    UIXX  
       2022-05-11 18:44:51 +08:00
    对于已经语义化了的变量,我有一种评判代码逻辑组织是否合理的方式,即

    用自然语言去试读代码是否会让人感到冗余。

    从这个角度来看,我是同意 LZ 的说法,比如 if isOpened == true (假如 已打开 为真)就不如 if isOpened (假如已打开)。
    SG4YK
        118
    SG4YK  
       2022-05-11 19:00:57 +08:00 via iPhone
    😅
    justin2018
        119
    justin2018  
       2022-05-11 19:15:41 +08:00
    变量命名 看着好累 一下英文 一下拼音~~

    代码 写得挺好的~

    逻辑一下就看清楚了 知道是干嘛的
    timothyye
        120
    timothyye  
       2022-05-11 19:19:49 +08:00
    如果工资是以代码行数来计算的话,这是高人一等的水平
    v2eb
        121
    v2eb  
       2022-05-11 19:26:06 +08:00 via Android
    就是感觉啰嗦,哈哈哈
    l00t
        122
    l00t  
       2022-05-11 19:27:07 +08:00
    随意了点,啰嗦了点,其他问题不大。至少结构是清晰的。就这么几行也看不出别的,不知道需求的情况下有些没法说好不好。
    gogogo1203
        123
    gogogo1203  
       2022-05-11 19:35:50 +08:00   ❤️ 2
    大家聊了那么多都不知道为什么

    operateName =toLowerCase(operateName)

    switch(operateName ) {
    case "bangding":
    ....
    break;
    case "shuaxin":
    ...
    break;
    default:
    ...
    }
    gogogo1203
        124
    gogogo1203  
       2022-05-11 19:45:44 +08:00   ❤️ 1
    我搞不明白了,为什么还会有人说 原代码容易读.
    oldmanong
        125
    oldmanong  
       2022-05-11 19:59:04 +08:00 via iPhone
    代码写得绕,简单逻辑写复杂,但能保证性能,也故意埋点儿坑。于是乎一有问题都找他,上司看着工作饱和,老板觉得不可替代。你看他 2 ,他看你也 2
    documentzhangx66
        126
    documentzhangx66  
       2022-05-11 20:02:20 +08:00   ❤️ 2
    1.定义变量,并初始化赋值,是有意义的。你们没写过 C/CPP ,没调试过复杂程序,自然不知道为啥要这么干。
    var isOperate_BangDing = false;
    var isOperate_ShuaXin = false;

    2. if else 这里,我不觉得有啥问题,你要改成别的结构也可以,但我觉得 if else 更能体现思路。
    if ("bangDing".equalsIgnoreCase(operateName))
    {
    isOperate_BangDing = true;
    }
    else if ("shuaXin".equalsIgnoreCase(operateName))
    {
    isOperate_ShuaXin = true;
    }

    3.这里就不得不说了,不能这样子做,一条 if 语句,应该尽量少的包含操作,这样才利于 debug 。
    if (isOperate_BangDing == true
    || isOperate_ShuaXin == true) {...

    我建议这里加一条临时变量,并且为了可读性,把括号也加上:
    var tempResult = ( (isOperate_BangDing == true) || (isOperate_ShuaXin == true) );
    if( tempResult ) ....
    leaves615
        127
    leaves615  
       2022-05-11 20:22:04 +08:00
    @cnrting 精辟
    FanError
        128
    FanError  
       2022-05-11 20:30:12 +08:00
    @anonydmer 可怕,连这种简单的 if 语句都要用这么秀的代码了吗
    RiceNoodle
        129
    RiceNoodle  
       2022-05-11 20:37:22 +08:00
    这命名、字符串常量、缩进风格,不及格。
    一个变量,用多个 bool 表述 而不是枚举,不及格。

    至于用三目运算符还是 if else ,都可以,多几行影响不了啥。
    c138Morty
        130
    c138Morty  
       2022-05-11 20:48:34 +08:00
    如果是需求不明确,一直在改动,临时来一版需求,然后还通宵加班必须完成,我只能说很好了,业务逻辑清晰,后续需求变动,还能接着调整
    Uplay
        131
    Uplay  
       2022-05-11 20:50:35 +08:00
    @documentzhangx66 有些蒙了
    Jakarta
        132
    Jakarta  
       2022-05-11 21:07:34 +08:00
    @documentzhangx66 认同。有的语言中变量需要初始化,有的语言 if 判断也需要==true 。唯一就是,变量命名上蛇形命名和驼峰命名混用、英文和拼音混用。
    yehoshua
        133
    yehoshua  
       2022-05-11 22:28:57 +08:00
    整个代码表达的很清晰方便读,也实现了相应的功能,我觉得问题不大。最大问题反而是命名,看着真难受。我自己 C/C++的习惯,变量初始化必须要赋值。其他的,编译器编译时候会优化掉,反正我觉得没啥大毛病
    lululau
        134
    lululau  
       2022-05-11 22:36:30 +08:00
    明明一行代码就可以搞定

    if (Stream.of("bangding", "shuaxin").anyMatch(operateName::equalsIgnoreCase)) {

    }
    haah
        135
    haah  
       2022-05-11 22:39:12 +08:00
    一千个观众眼中有一千个哈姆雷特
    lcj2class
        136
    lcj2class  
       2022-05-11 22:41:29 +08:00
    就问一句,你领导不上这个网站吗?
    waterlaw
        137
    waterlaw  
       2022-05-11 23:23:46 +08:00 via Android
    变量中英文,驼峰和下划线大杂烩
    常量魔法数
    boolean == true 可简写
    techstay
        138
    techstay  
       2022-05-11 23:23:47 +08:00
    很烂的代码,但是也不算多烂,毕竟比较容易看懂。那种看不懂的代码才是最烂的。
    summersun2021
        139
    summersun2021  
       2022-05-12 00:25:21 +08:00
    看不懂,觉得很厉害的样子。
    Weixiao0725
        140
    Weixiao0725  
       2022-05-12 00:58:32 +08:00
    楼上吐槽拼音的,这叫“文化自信”
    ryd994
        141
    ryd994  
       2022-05-12 02:31:09 +08:00 via Android
    单看这两行其实问题真不大……
    可读性还更好了

    不知道 java 如何,反正在 C 里,这样写是不会影响性能的。编译器全都给你优化掉。
    nanjoyoshino
        142
    nanjoyoshino  
       2022-05-12 08:16:54 +08:00
    我是感觉这么写挺奇葩的,但是吧,也不是什么多大的问题
    当没看见算了
    angryfish
        143
    angryfish  
       2022-05-12 08:41:50 +08:00
    1.能看懂不?
    2.有 bug 不?
    3.写起来浪费时间不?
    都不的话,干就是了!写完来 v2 摸鱼不香吗?
    klo424
        144
    klo424  
       2022-05-12 08:49:40 +08:00
    @gps949 这代码我看着挺舒服的,正如你所说可能是考虑到后续的改动,我也是喜欢这么写。我本来以为 v2 上的 coder 水平都很高的,看了上面那些回复,感觉大多数人水平都很一般。也有可能是因为语言的不同?我也是写 C#的😂
    chanchan
        145
    chanchan  
       2022-05-12 09:01:12 +08:00
    我觉得不是问题,能举点真正有问题的例子吗
    yaocai321
        146
    yaocai321  
       2022-05-12 09:17:58 +08:00
    你还在纠结代码写得好不好的时候, 他都是领导了。
    rev1si0n
        147
    rev1si0n  
       2022-05-12 09:37:23 +08:00
    我之前的领导写的那个 Python 代码,也是现学现卖写的东西,动不动 temp ,你是真的会疯
    ghostsf
        148
    ghostsf  
       2022-05-12 09:53:11 +08:00
    还好吧,就是规范上要稍微注意下。这么写其实也体现出思路,也便于后续维护调整等
    lovedebug
        149
    lovedebug  
       2022-05-12 09:58:24 +08:00
    这是没有代码风格自动校验以及没有代码审查的直接后果。
    chenyu0532
        150
    chenyu0532  
       2022-05-12 10:07:58 +08:00
    你应该想的是:写出这种代码的为什么都能当你的领导,为什么你不是领导,差在哪。。
    Bingchunmoli
        151
    Bingchunmoli  
       2022-05-12 10:08:07 +08:00 via Android
    槽点在于命名拼音(这个还算小问题),下划线驼峰混合,java 通常是驼峰,我没有用过 var 不予评价,
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3145 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 13:01 · PVG 21:01 · LAX 06:01 · JFK 09:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.