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

大家工作中都遇到过哪些神奇的代码

  •  1
     
  •   xujinkai ·
    XUJINKAI · 2019-08-23 11:48:40 +08:00 · 8354 次点击
    这是一个创建于 1920 天前的主题,其中的信息可能已经有所发展或是发生改变。
    说出来让我开心一下🤣

    我现在遇到的,命名都是 data、json、obj、map。
    代码复用不存在的,每一个接口都是一大坨,其中一半多没用的验证代码。
    参数全部字符串拼,我肉眼就发现好几个错了。
    文档没有,照着源码猜。
    测试没有。。。严格的说是有的,一个近千行的 main 函数,只要能跑通不报错就行。
    🤣🤣🤣
    88 条回复    2019-08-26 16:02:55 +08:00
    nikandaoleshenme
        1
    nikandaoleshenme  
       2019-08-23 12:07:02 +08:00   ❤️ 24
    对不起,没碰到过,周边的同事写代码都流弊,代码有注释,文档清晰,源代码有版本追朔,每周 codeview,有 checkstyle,作为一个螺丝钉码农,随时可以被替换,

    没啥存在感,所以最近准备换工作,换到 lz 说的这样的环境中去锻炼锻炼
    xujinkai
        2
    xujinkai  
    OP
       2019-08-23 12:15:36 +08:00 via Android   ❤️ 1
    @nikandaoleshenme 别闹🤣
    fenddddddda
        3
    fenddddddda  
       2019-08-23 12:18:09 +08:00   ❤️ 2
    bool isCan
    if(isCan) {

    }
    else if(!isCan) {
    }
    我前几天刚看到的。
    cabing
        4
    cabing  
       2019-08-23 12:18:56 +08:00
    @nikandaoleshenme 规范的大厂哦~ =。=
    cabing
        5
    cabing  
       2019-08-23 12:19:49 +08:00
    你这还行吧。
    你能想象一个类 1w 多行?
    nikandaoleshenme
        6
    nikandaoleshenme  
       2019-08-23 12:32:48 +08:00
    @xujinkai 想到了一句话,成功的结果只有一个,失败的理由千千万万 (没记清楚,大概这个意思 {表情})
    拿到我们码农来说,就是,规范的代码就一种,不规范的千千万万 (手动滑稽)
    tigerfyj
        7
    tigerfyj  
       2019-08-23 12:35:22 +08:00 via Android
    @cabing 10 年时候进的一个外企,一个系统 50 多个类,平均 12k 行,最多的三个都是 18k,少的也都 7,8k 行。当时修 bug 真的是爽到了。
    kxy
        8
    kxy  
       2019-08-23 13:46:07 +08:00
    不知道咋想的,变量能命名成这样,大写的服:
    Map<XXX,XXX> SOME_ANOTHER_MAP = new HashMap<>();
    Map<String,Integer> Map = new HashMap<>();
    pipixia
        9
    pipixia  
       2019-08-23 14:05:58 +08:00 via Android
    @fenddddddda 我还真见过 人都傻了
    Orenoid
        10
    Orenoid  
       2019-08-23 14:09:19 +08:00
    昨天还在一篇博客看到这种代码:
    if someCondition:
    return True
    else:
    return False
    trustbutverify
        11
    trustbutverify  
       2019-08-23 14:10:16 +08:00 via iPhone
    @Orenoid 可以 很严谨
    firefffffffffly
        12
    firefffffffffly  
       2019-08-23 14:13:15 +08:00
    for(int i=0;i<3;i++) {
    switch(i) {
    case 0:
    doSth();
    break;
    case 1:
    doSth2();
    break;
    case 2:
    doSth3();
    break;
    }
    }
    v2hh
        13
    v2hh  
       2019-08-23 14:13:44 +08:00
    @Orenoid 可以,逻辑很清晰
    argc
        14
    argc  
       2019-08-23 14:14:36 +08:00
    bool isCan
    if(isCan==true) {

    }
    看到许多人这样写觉得有点神奇。。
    augustheart
        15
    augustheart  
       2019-08-23 14:14:50 +08:00
    看到命名那块我以为是在说我……
    augustheart
        16
    augustheart  
       2019-08-23 14:16:08 +08:00
    @Orenoid 这种代码有个好处是方便下断点:)
    lc1450
        17
    lc1450  
       2019-08-23 14:20:37 +08:00   ❤️ 1
    第一次见到这么用 rollback 的

    record = XX.query.get(id)
    if record:
    db.session.delete(record)
    else:
    db.session.rollback()
    Lin0936
        18
    Lin0936  
       2019-08-23 14:26:27 +08:00
    var someObj = someBool ? false : true
    Justin13
        19
    Justin13  
       2019-08-23 14:32:48 +08:00 via Android
    const key = someList.find(item => item.key === FOO).key
    no1xsyzy
        20
    no1xsyzy  
       2019-08-23 14:47:48 +08:00
    @Orenoid 可以处理为真但不是真本身的值,尤其如果某个语言没有提供恰当的任意值的布尔转换的内置函数的情况下。
    不过哪个语言没有呢?不然写个 bool_cast 也可以的
    Michaelssss
        21
    Michaelssss  
       2019-08-23 14:52:33 +08:00
    @Orenoid。。。。。。我这里的一个新手就爱这么写,我都懒得说他了。。
    drafter
        22
    drafter  
       2019-08-23 14:55:24 +08:00
    楼主说的...和我们公司好像 哈哈哈哈
    taotaodaddy
        23
    taotaodaddy  
       2019-08-23 14:56:07 +08:00 via Android
    @Orenoid 又严谨,行数又多,满足按代码行数 kpi 要求
    Orenoid
        24
    Orenoid  
       2019-08-23 15:05:31 +08:00
    @no1xsyzy #20 他那个 someCondition 就是个百分之一百的 bool 值。。
    autoxbc
        25
    autoxbc  
       2019-08-23 15:08:46 +08:00
    对于局部变量,当定义过程和调用过程紧邻的时候,简化命名是可以接受甚至是推荐的
    nanmian
        26
    nanmian  
       2019-08-23 15:43:10 +08:00
    i = i++; 交接的时候前人交给我的,至今没想明白他要干什么.
    TencentCEO
        27
    TencentCEO  
       2019-08-23 16:32:06 +08:00
    看到过一段过滤非法字符的,其实也就是把 ASCII 码值是从 100 到 255 的替换成空格。
    string s;
    遍历字符串里的每个字节,把每个字节再跟 100 到 255 每个对比一下……大概是这样的

    foreach( char c in s)
    {

    for(char a=100; a<256; a++)
    {

    if(c==a) {c=' ';}

    }

    }

    大家看出这段代码的问题了吗?只要把里面那层循环替换成

    if(c>100) {c=' ';}

    就行了……
    TencentCEO
        28
    TencentCEO  
       2019-08-23 16:34:02 +08:00
    @TencentCEO 而且我们这段代码是出现在大量数据提取时候用的,将近百万条的数据,每条数据有好几个字段要被这样过滤……
    5yyy
        29
    5yyy  
       2019-08-23 16:35:00 +08:00
    CTO 很注重代码质量,刚入职的时候被教育了好多次ಥ_ಥ
    nealwx
        30
    nealwx  
       2019-08-23 16:38:52 +08:00
    我有一个同事专写各种奇怪的代码,只管是否能编过,测试没问题即可。
    shadeofgod
        31
    shadeofgod  
       2019-08-23 17:20:17 +08:00
    return a <= 0 ? true : false;
    virus94
        32
    virus94  
       2019-08-23 17:21:56 +08:00
    ob_start();
    ob_clean ();
    然后就没了
    MMMMMMMMMMMMMMMM
        33
    MMMMMMMMMMMMMMMM  
       2019-08-23 17:26:37 +08:00
    <button onclick="alert('清除缓存成功')">清除缓存</button>
    wangchonglie
        34
    wangchonglie  
       2019-08-23 17:36:29 +08:00
    @nanmian #26 堆砌代码量[滑稽]
    111qqz
        35
    111qqz  
       2019-08-23 17:46:47 +08:00
    ```
    if(label < 0 || label > 4)
    {
    exit(233);
    }
    ```
    Cyshall
        36
    Cyshall  
       2019-08-23 19:07:51 +08:00 via iPhone
    @111qqz 一时没看懂,这是要表达啥…,0-4 的值都不要?
    way2create
        37
    way2create  
       2019-08-23 19:10:25 +08:00
    我变量有时也会命名 data 的 就表示是数据 有什么不妥吗?
    ys759206502
        38
    ys759206502  
       2019-08-23 19:10:36 +08:00 via Android
    系统设计成访问到 404 就强制退出系统,然后注销登录按钮索性调了个不存在的接口
    hmxxmh
        39
    hmxxmh  
       2019-08-23 19:27:02 +08:00 via Android
    @way2create 😂对啊倒是说为什么不规范啊
    monkeylyf
        40
    monkeylyf  
       2019-08-23 19:31:45 +08:00
    final boolean isValid = true;

    ...

    if (isVaild == true) { // do something. }
    inwar
        41
    inwar  
       2019-08-23 19:32:44 +08:00 via Android
    @Orenoid 可能前后都是一样的形式复制粘贴,只不过恰好这个是布尔
    loveToMy1
        42
    loveToMy1  
       2019-08-23 19:44:22 +08:00 via Android
    哈哈 我写的都是不规范的代码😅
    sudri
        43
    sudri  
       2019-08-23 20:03:08 +08:00
    boolean bool = a == b ? true : false;
    cabing
        44
    cabing  
       2019-08-23 20:04:07 +08:00
    @tigerfyj 这些坨垃圾代码通常没有单元测试。因为没法测试。业务逻辑耦合验证,很容易牵一发动全身。

    最要命的是业务需求还在堆积。。
    learningman
        45
    learningman  
       2019-08-23 21:56:57 +08:00 via Android
    @nanmian 可能是觉得直接 i++不优雅
    ddup
        46
    ddup  
       2019-08-23 22:02:03 +08:00 via Android
    某人写了一个 12MB 的 SQL 存储过程
    xuanbg
        47
    xuanbg  
       2019-08-23 22:11:26 +08:00
    我也是经常给变量命名为 data、json、obj。。。反正只是方法内使用一次,搞个变量不过是为了不至于一行代码太长不好看,也方便调试的时候有变量可以看到值罢了。
    Varobjs
        48
    Varobjs  
       2019-08-23 22:35:29 +08:00 via Android
    有,就是我
    var obj = varobj.com
    /逃
    ffeii
        49
    ffeii  
       2019-08-23 22:45:05 +08:00
    滥竽充数
    90d0n
        50
    90d0n  
       2019-08-23 23:00:27 +08:00
    某央企建设集团的项目, 全集团在用
    整个项目里一个实体类都没有, 全靠 Map<String, Object>.
    没交接, 没文档, 没注释, 维护起来真爽
    dvaknheo
        51
    dvaknheo  
       2019-08-23 23:00:50 +08:00
    @cabing web MVC 的 Controller 不都是长这么长么 (逃

    都怪你们说 MVC,业务处理要单独放一层,Controller 层只是作为 外部参数处理的啊
    Xbluer
        52
    Xbluer  
       2019-08-23 23:05:29 +08:00   ❤️ 1
    总的来说,代码写得好的都在刷 V2,而写的不好的都在哼次哼次写代码。。。
    doublie
        53
    doublie  
       2019-08-23 23:11:27 +08:00 via iPhone
    有用过 phplist 的同学么
    111qqz
        54
    111qqz  
       2019-08-23 23:28:14 +08:00 via Android
    @Cyshall 认为合理值是[0,4] 槽点是没有任何 log 直接 exit … 接手的时候找了好久
    icekingcy
        55
    icekingcy  
       2019-08-24 00:06:43 +08:00 via iPhone
    时间排序法
    ooee2016
        56
    ooee2016  
       2019-08-24 00:12:07 +08:00 via iPhone
    string s1, string s2, string s3, string s4...
    chairuosen
        57
    chairuosen  
       2019-08-24 00:48:29 +08:00
    mvc,c 里面改 v 的状态
    jakezh
        58
    jakezh  
       2019-08-24 03:13:34 +08:00
    @111qqz #54 不是有 233 嘛 全局搜索打断点就是了
    cabing
        59
    cabing  
       2019-08-24 06:16:42 +08:00
    @dvaknheo 写过单元测试就不会这么长啊。这么长根本没法测试。。条件都没法覆盖到。
    wangsongyan
        60
    wangsongyan  
       2019-08-24 07:10:00 +08:00 via iPhone
    @nanmian 单纯为了留个坑
    printese
        61
    printese  
       2019-08-24 07:41:54 +08:00
    int a = 0, b = 0;
    if (属于第一类别) {
    a |= 1;
    }
    if (属于第二类别) {
    b |= 1;
    }

    string str = a.ToString()+b.ToString();
    if (str.equals("00")) {
    //不属于第一类别也不属于第二类别
    }
    if (str.equals("01")) {
    //属于第二类别但不属于第一类别
    }
    if (str.equals("10")) {
    //属于第一类别但不属于第二类别
    }
    if (str.equals("11")) {
    //属于第一类别也属于第二类别
    }
    gavindexu
        62
    gavindexu  
       2019-08-24 07:51:36 +08:00 via iPhone
    在我司数据库中看到了一个 dajevu
    unicloud
        63
    unicloud  
       2019-08-24 07:51:43 +08:00 via iPhone
    为了给下次优化提供条件,写成这样:
    ...
    doSomething();
    Thread.sleep(3000);
    ...
    GeruzoniAnsasu
        64
    GeruzoniAnsasu  
       2019-08-24 07:52:54 +08:00 via Android
    不觉得每次这个话题回复都差不多吗

    无非是没用的 if else,变量名,“超动态”类型

    http://siliconframework.org/
    来看看这种真的挺有意思的代码
    tab16360
        65
    tab16360  
       2019-08-24 08:05:31 +08:00 via Android
    审一个工作 3 年 javaer 的代码,登录方法命名为 tuichu()😓
    ys0290
        66
    ys0290  
       2019-08-24 08:17:12 +08:00 via iPhone
    简单的 if else 可能是为了以后扩充方便
    ethanSong
        67
    ethanSong  
       2019-08-24 09:10:17 +08:00
    @argc 估计是 C/C++写多了?
    aitaii
        68
    aitaii  
       2019-08-24 09:17:04 +08:00 via iPhone
    java web 功能,没有定义实体对象,前后台传值用数组。
    hoyixi
        69
    hoyixi  
       2019-08-24 09:19:24 +08:00
    领导眼里,能快速的上线,跑起来就行了,至于维护、后期重构,可以靠 996 加班解决,反正涌入这行的小年轻多的是,低价+加班就行,写出来的质量本来也没指望
    aaronhua
        70
    aaronhua  
       2019-08-24 09:20:45 +08:00
    中文变量 、过程写法 1800+行
    sherlockwhitebb
        71
    sherlockwhitebb  
       2019-08-24 09:21:09 +08:00
    function car_id($car,$No,$No_totle){
    $tomorrow=strtotime(date('Y-m-d 23:59:59'));
    $No=0;//今天第几个注册
    $No_totle=0;//总数
    。。。
    }
    这是我这辈子看过最秀的
    dvaknheo
        72
    dvaknheo  
       2019-08-24 09:32:01 +08:00
    @cabing 哈,单元测试什么鬼, 产品定任务,做完 测试测 OK 上线,上线完。
    “本来好好的,你把他动坏了,你说该怎么办吧”
    hewelzei
        73
    hewelzei  
       2019-08-24 09:35:16 +08:00
    ```javascript
    if (objExp.test(url) == true) return true;
    else return false;
    ```
    严谨到完美无缺
    cabing
        74
    cabing  
       2019-08-24 09:37:16 +08:00
    @dvaknheo 弄坏了,你就是背锅侠。。
    piaochen0
        75
    piaochen0  
       2019-08-24 09:42:11 +08:00
    我之前接手了一个项目,大部分变量名都在二十个字以上,基本上就是一句话...
    还有另外一个非常资深的哥们,写的代码自带混淆,所有的命名都是 a1,a2,a3 这样...写游戏引擎的大牛...关键问题是,别人都完全看不懂他的代码,他自己隔了好几个月后,立马就能看懂。
    xdtr
        76
    xdtr  
       2019-08-24 09:46:00 +08:00
    int v1 = 0,v2 = 0;
    (v1 v2 被赋值)
    string s = v1.ToString() + v2.ToString();
    if(s == "1122"){...}
    else if(s == "3344"){...}
    ...
    lonelygo
        77
    lonelygo  
       2019-08-24 10:14:08 +08:00
    莫名其妙的 if else 大概率是先写着占位,准备以后扩展,但是,没等到以后就跑路了。
    qwertyegg
        78
    qwertyegg  
       2019-08-24 10:31:12 +08:00
    do{
    ***
    }while(true)
    xy90321
        79
    xy90321  
       2019-08-24 11:13:08 +08:00 via iPhone
    @Orenoid
    如果是业务逻辑封装那完全不会觉得奇怪
    Orenoid
        80
    Orenoid  
       2019-08-24 11:18:55 +08:00 via Android
    @xy90321 主要是那篇文章里头就是个小的不能再小的 demo 代码,我放的基本就是文里的原代码了。。
    111qqz
        81
    111qqz  
       2019-08-24 17:27:08 +08:00 via Android
    @jakezh 那是看到了代码才知道有 233 啊……
    sumika
        82
    sumika  
       2019-08-24 18:23:05 +08:00
    ```javascript
    var detailsValue1 = "";
    var detailsValue2 = "";
    var detailsValue3 = "";
    var detailsValue4 = "";
    var detailsValue5 = "";
    var detailsValue6 = "";
    var detailsValue7 = "";
    var detailsValue8 = "";
    var detailsValue9 = "";
    var detailsValue10 = "";
    var detailsValue11 = "";
    var detailsValue12 = "";
    ```

    以上代码是我从项目里复制出来的
    EscYezi
        83
    EscYezi  
       2019-08-24 22:43:27 +08:00 via iPhone
    最近进了一个项目,说说其中的两个槽点:

    1. 出现拼音+英文混合命名,比如 ListOfYeMian (页面)

    2.连着六七行声明 List<Object> xxList
    然后里面存 Integer ……

    剩下的命名风格不一致、Typo、没有注释、没有文档等等就不说了......听老员工说这项目换了好几批人🌚
    EscYezi
        84
    EscYezi  
       2019-08-24 22:44:23 +08:00 via iPhone
    @fenddddddda #3 这个我也遇到了🌚
    EscYezi
        85
    EscYezi  
       2019-08-24 22:47:59 +08:00 via iPhone
    @90d0n #50 Java 当成 PHP 写🤣
    linvaux
        86
    linvaux  
       2019-08-24 22:53:47 +08:00
    for i in xxx:
    for j in xxx:
    for k in xxx:
    for t in xxxx:
    xxxx
    别笑,真有人这么写的,毫无意义的变量名
    aguesuka
        87
    aguesuka  
       2019-08-25 10:04:42 +08:00 via Android
    int number0=0;这样的代码写到了 47
    NDMXXSMX
        88
    NDMXXSMX  
       2019-08-26 16:02:55 +08:00
    @sumika 笑死我了,魔鬼数字啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2761 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:49 · PVG 15:49 · LAX 23:49 · JFK 02:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.