V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
szpinc1102
V2EX  ›  程序员

网上看到的段子照进了现实,这种代码出现在我的项目中!

  •  
  •   szpinc1102 · 105 天前 · 24458 次点击
    这是一个创建于 105 天前的主题,其中的信息可能已经有所发展或是发生改变。

    给大家观摩一下,给我看傻了

    image.png

    227 条回复    2024-09-06 14:59:53 +08:00
    1  2  3  
    levelworm
        1
    levelworm  
       105 天前
    这大概就是不停的粘贴复制造成的吧,懒得重构了?
    TsubasaHanekaw
        2
    TsubasaHanekaw  
       105 天前   ❤️ 20
    导入导出 excel 表格真是最屎的活
    szpinc1102
        3
    szpinc1102  
    OP
       105 天前
    @levelworm 这是新写的代码,新代码都能写成这样
    robinchina
        4
    robinchina  
       105 天前   ❤️ 1
    能用就行
    szpinc1102
        5
    szpinc1102  
    OP
       105 天前
    @TsubasaHanekaw 但是也不能写成这样吧
    zizon
        6
    zizon  
       105 天前   ❤️ 14
    你看中间凸出的 应用服务器 等几个你就知道这种写法的某种形式的干净存粹了.
    jiabing520a
        7
    jiabing520a  
       105 天前   ❤️ 2
    就说是不是一目了然吧,(●'◡'●)
    jorneyr
        8
    jorneyr  
       105 天前   ❤️ 1
    你就说这是不是执行效率最高的实现吧!!!
    moudy
        9
    moudy  
       105 天前 via iPhone
    @szpinc1102 有可能是脚本生成的
    moudy
        10
    moudy  
       105 天前 via iPhone
    @jorneyr 这堆 equal 走下来显然不是啊
    fruitmonster
        11
    fruitmonster  
       105 天前
    所以最合理的方式是使用 map? 还是怎么
    tool2dx
        12
    tool2dx  
       105 天前   ❤️ 1
    90%的业务代码又没性能需求,我都是随便写的,怎么好维护,就怎么来。
    lervard358
        13
    lervard358  
       105 天前
    好奇 正确的写法是啥 弄个 table ,提前把映射关系弄好吗
    puzzle9
        14
    puzzle9  
       105 天前
    能用 直观
    虽然看起来不优雅
    不过 你给对方发工资吗
    不发的话 那管啥子
    greensea
        15
    greensea  
       105 天前
    说不定是 copilot 写的呢,反正 tab 一下就都出来了,毫不费力
    bug123
        16
    bug123  
       105 天前   ❤️ 4
    好奇有更好的写法吗
    AlexRoot
        17
    AlexRoot  
       105 天前
    想知道这个长截图是如何实现的?
    laoyur
        18
    laoyur  
       105 天前
    CA IP 表示看不到图
    smdbh
        19
    smdbh  
       105 天前
    其实也没啥不好
    laoyur
        20
    laoyur  
       105 天前
    额,发完上面的回复突然又能看到了 😅
    如果确实需要通过字符串比较,那这样写好像也没毛病啊,至少很清晰
    可能大部分执行的都是同样的一句代码,显得比较啰嗦,可以把条件合并起来
    ConquerZ
        21
    ConquerZ  
       105 天前
    你们都能看到图吗
    Track13
        22
    Track13  
       105 天前 via Android   ❤️ 1
    还行,我手上一个项目一个 vue 页面 6000 多行,一个 echart 图表依赖 2 个 json ,文件合计 20 几 k😢
    woodwhales
        23
    woodwhales  
       105 天前
    这段代码,从语法结构上看是 Java 。可以推测这段代码在导出 excel 文件并设置满足条件的指定列进行隐藏。如果是我重构,我能想到的是去除多重 if else ,用 map 集合先保存每个条件,然后一个循环遍历 map 中是否存在满足条件。伪代码如下:

    ```java

    // 业务逻辑外部定义
    static Map<String, Function<ExportColumn>> map = new HashMap<>();

    static {
    map.put("服务器名称", data -> !data.getAppServer().isServerName());
    }


    // 业务逻辑内

    if(map.containsKey(cell.getStringValue())) {
    boolean flag = map.get(cell.getStringValue()).apply(dto.getExportColumn());
    sheet.setColumnHidden(index, flag);
    }

    ```
    ooxx2123
        24
    ooxx2123  
       105 天前
    要我重构的话,也是 23L 的思路,好奇大家有什么其他方式吗?
    或者保留原样,我感觉也还好,就是看起来不太简洁。
    potatowish
        25
    potatowish  
       105 天前 via iPhone
    excel 导入导出是初级 java 必备技能,怎么把很容易写成💩的代码写的优雅这就是中级 java 的技能了
    ma836323493
        26
    ma836323493  
       105 天前
    用反射, 另外 model 上一般也有注解 ApiModelProtery
    yb2313
        27
    yb2313  
       105 天前
    丑陋的 equal
    ice
        28
    ice  
       105 天前
    挺好,我想不到重构的方法,而且也没想到最后生成的 Excel 是个多复杂的玩意
    loocao
        29
    loocao  
       105 天前
    清晰明了,简单又方便维护
    adminii
        30
    adminii  
       105 天前 via iPhone
    项目组代码量考核,第一了
    awalkingman
        31
    awalkingman  
       105 天前
    @yul36074 第一次加载需要挺长时间
    chenyu8674
        32
    chenyu8674  
       105 天前   ❤️ 2
    虽然不优雅,但好处是随便换个开发都能懂

    离真正的屎山差远了
    jackOff
        33
    jackOff  
       105 天前
    整个枚举类,初始化时把枚举类灌入一个 map 里面
    xiaoshengwpp
        34
    xiaoshengwpp  
       105 天前
    这代码写的很优雅啊,谁上手看一眼都能维护的来。
    justfindu
        35
    justfindu  
       105 天前   ❤️ 36
    先不要吐槽, 先改一版你觉得好的. 一起放出来
    luohaiyang
        36
    luohaiyang  
       105 天前
    又不是不能用,狗头
    angenin
        37
    angenin  
       105 天前
    @adminii 这个方法写完,当天代码行数的任务量直接完成🤣
    junwind
        38
    junwind  
       105 天前
    这种千万千万不要想着重构,能跑就行。
    enihcam
        39
    enihcam  
       105 天前
    这不是代码问题,这是管理问题。
    enihcam
        40
    enihcam  
       105 天前   ❤️ 1
    如果老板是“能用就行”的心态,这个团队长不了。
    meeop
        41
    meeop  
       105 天前
    我觉得写得挺好的,逻辑简洁清晰易于维护


    如果觉得这都不好,你手动封装成其他逻辑,出了 bug 你背锅就行
    如果不敢这么做,这也是上一个人不这么做的原因
    toan
        42
    toan  
       105 天前
    挺好,要逻辑有逻辑,要代码量有代码量,还能正常运行 👍
    5sheep
        43
    5sheep  
       105 天前   ❤️ 2
    我对这段代码的评价是:满意
    byc4i
        44
    byc4i  
       105 天前
    看到等保测评,不知道是不是某地网安部门的外包。你这个属于泄露源码了。
    yhxx
        45
    yhxx  
       105 天前
    曾经我也觉得看不下去
    现在我也这么写
    清晰易懂,更重要的是代码量拉满了
    lisxour
        46
    lisxour  
       105 天前
    最起码一目了然,你就该偷笑了
    barrysj
        47
    barrysj  
       105 天前
    全量 map 还是省不了的吧,顶多把 set true 那行抽出来
    wangritian
        48
    wangritian  
       105 天前
    不考虑反射吗,真的一行行硬写
    QXDM
        49
    QXDM  
       105 天前
    fresco
        50
    fresco  
       105 天前
    好奇有更好的写法吗
    hekunhotmail
        51
    hekunhotmail  
       105 天前
    gpt 一键重构
    RobertWu
        52
    RobertWu  
       105 天前 via Android
    真诚发问,反射要怎么写?
    janda
        53
    janda  
       105 天前
    代码和人有一个能跑就行
    opengps
        54
    opengps  
       105 天前
    我问下更好的写法是啥?我有过类似的经历,因为具体字段完全是现场要求的,没法提前知道,所以做成了一个批量赋值的模式,别看内容多,其实只是几下纵向复制粘贴就能出来这么多代码
    NEPv5NA6R8R3Y11u
        55
    NEPv5NA6R8R3Y11u  
       105 天前
    daybreakfangyang
        56
    daybreakfangyang  
       105 天前
    看着头大🤦‍♂️,空指针警告
    wyx119911
        57
    wyx119911  
       105 天前
    其实还不错的,很清晰。如果是我的话会改成用 switch case 优化下分支判断的性能,但大体结构保持。
    ShaoLongFei
        58
    ShaoLongFei  
       105 天前   ❤️ 3
    @QXDM 我觉得这种代码明显更糟糕
    teenight
        59
    teenight  
       105 天前
    你行你上
    panlatent
        60
    panlatent  
       105 天前   ❤️ 2
    改 if-else 到 switch :

    title = cell.getStringCellValue()
    switch (title) {
    case "xxxx":
    break;
    }

    这样可以确保每列处理方法集中在一个 case 。

    对于最多的检查+隐藏操作,可以封装为一个函数来改进 if 结构:
    hiddenColumnIfNot(dto.getExpartColumn().getAppProject().isProjectYea())

    dto.getExpartColumn() 输入起来费劲可改成一个中间变量
    plasticman64
        61
    plasticman64  
       105 天前
    说不定他的工资很低呢,收多少钱干什么活呗
    ZGame
        62
    ZGame  
       105 天前
    @Track13 解耦阿 1. widget/chart/echart-wrapper 2. data/json
    gollwang
        63
    gollwang  
       105 天前
    没人注意到这些关键词吗?
    密码评测、等保、国产化
    Mandelo
        64
    Mandelo  
       105 天前
    我们用的是自定义注解+导出工具类,类似 easy-excel
    CodeCodeStudy
        65
    CodeCodeStudy  
       105 天前
    代码很直观啊,换个人都懂
    yb2313
        66
    yb2313  
       105 天前
    @QXDM py 里面字符串不转成枚举吗, 不然未来改字符串改得你头痛, 还不报错
    lucasdev
        67
    lucasdev  
       105 天前
    很常见的场景,个人觉得比较“优雅”的做法是,在实体类字段上面加注解,然后通过反射来做
    x86
        68
    x86  
       105 天前
    别的不说,接盘的人应该庆幸了,你见过 IDE 右边红的跟牛市一样的代码吗
    NoOneNoBody
        69
    NoOneNoBody  
       105 天前
    10 个以内判断我还可以写,10 个以上我就想用状态机了
    qiaobeier
        70
    qiaobeier  
       105 天前
    不是挺工整的吗,有什么问题?
    nb85144
        71
    nb85144  
       105 天前
    能用就行了,反正最后都得变成屎山
    shiguiyou
        72
    shiguiyou  
       105 天前
    读起来很易懂
    Smilencer
        73
    Smilencer  
       105 天前 via iPhone   ❤️ 17
    挺好的,应该是高手写的。
    随时应对产品经理提出的改动需求,你看有些字段确实需要特殊处理,简单迅速明了。
    你吭哧吭哧搞个封装啥的,改的时候有的你苦恼的!
    justdoit123
        74
    justdoit123  
       105 天前
    需求太多变的场景下,73# 的说法挺适用的。
    Greendays
        75
    Greendays  
       105 天前
    看代码都能想象出来 Excel 有多复杂了。这种写法可能真不算差的。
    zhangdawei
        76
    zhangdawei  
       105 天前
    这样好理解
    asdfasasdf
        77
    asdfasasdf  
       105 天前
    我觉得挺好的一目了然,后期功能应该也挺容易修改,要是把这个再封装在一个模块那就更完美了
    pkoukk
        78
    pkoukk  
       105 天前
    每一行的检查都有略有区别,我觉得没多大问题
    QXDM
        79
    QXDM  
       105 天前
    @yb2313 #66 没有 enumerate 这都是小事,更恐怖的是所有 write_rows 既没抽象也没做任何映射,光逻辑就快到 7 层,拉了 800 多行
    xcsoft
        80
    xcsoft  
       105 天前
    < 能跑就行了 > 真的
    oneisall8955
        81
    oneisall8955  
       105 天前
    又不是不能用.jpg
    pecsj
        82
    pecsj  
       105 天前
    分支不多就还好,优雅不优雅另说
    retrocode
        83
    retrocode  
       105 天前
    看起来是 excel 和 dto 之间缺失了对应关系, 一边可能是甲方提供的 excel 和 项目已有的对象, 这个明显是复制粘贴出来的, 我一眼看到 应用名称 的 case 出现了两次, 感觉用 map 的确会好很多, 这里绝大多数操作都是一样的
    alexsz
        84
    alexsz  
       105 天前
    整洁壮观,非常好懂,没毛病,真的
    shylockhg
        85
    shylockhg  
       105 天前
    @moudy 一般来说编译器应该把这种优化成查表
    Track13
        86
    Track13  
       105 天前
    @ZGame 解不动,2 个 json 快 30kb 了,一个文件 6000 多行没有几行注释。echart 的配置就靠这 2 个 json 各种循环遍历,还有一堆本地数据映射。json 里全是各种金融行业术语缩写。
    woniuppp
        87
    woniuppp  
       105 天前
    按行数定 kpi
    nightlight9
        88
    nightlight9  
       105 天前
    @opengps 如果是我,我选择用 excel 模板写,更直观一点
    Felldeadbird
        89
    Felldeadbird  
       105 天前
    能跑就行了。
    这业务代码基本是这样的:

    老板:小明,我想要个 ABCDEFG 的导出。你去实现一下。
    小明:好的老板。 老板我已经完成了。(老板应该不常用,直接硬编码导出)
    若干天后。
    老板:小明,GHJIT 列加一下。
    小明:加完了老板(擦,半年后回来,告诉我调整这个导出,弱智老板)

    如此反复。
    xuanbg
        90
    xuanbg  
       105 天前
    我导入导出都是搞个实体类,字段加注解就完了,像这种需求也一样用注解搞定。反正注解这玩意可以很多,一个搞不定就再来几个。哈哈哈
    C0dEr
        91
    C0dEr  
       105 天前
    如果只是某个特定业务,这么写也无可厚非,如果考虑复用的话,建议优化一下
    xloger
        92
    xloger  
       105 天前   ❤️ 7
    就这还一堆人说好?这一排下来谁知道哪里有没有哪里有特殊逻辑,哪里直观了?
    很明显,改法就是把这里的类型名和判断函数抽出来,弄个 Map 或者类似的合适的数据结构。然后特殊逻辑也拎一块,这才叫直观才叫一目了然好么?
    一大堆 if else 里藏几个特殊逻辑,也好意思管这叫好代码?
    git00ll
        93
    git00ll  
       105 天前
    我觉得没啥问题,导出功能而已比较边缘的能力不需要过度设计。 而且他还写了注释,看起来一目了然,如果要改这里任何人都能马上上手
    onichandame
        94
    onichandame  
       105 天前
    挺直观的
    liquid207
        95
    liquid207  
       105 天前
    添加一个 cell name 和 dto column 的映射,可以解决大部分的重复代码。添加一个匿名函数处理 “应用服务器” 之类有特殊逻辑的 cell 就可以了。
    lasuar
        96
    lasuar  
       105 天前
    大道至简,楼主还得再看看,不要只从技术角度看现象。
    28Sv0ngQfIE7Yloe
        97
    28Sv0ngQfIE7Yloe  
       105 天前
    wusheng0
        98
    wusheng0  
       105 天前
    说优雅的,说得我都怀疑自己了。

    哪怕你按照类型分开来组织呢

    kristofer
        99
    kristofer  
       105 天前
    @xloger #92 这论坛里大神有,水货更多,放松心态。有的人本来就不是真心干这一行的,指望他们能有什么代码情怀。
    wusheng0
        100
    wusheng0  
       105 天前   ❤️ 8
    @wusheng0 一说 35 就是失业,一说代码就是能跑就行。我是不想遇到这种同事。写得菜真的无所谓,对代码一点追求没有才是最痛苦的。除非你拉的屎永远不会让别人擦屁股
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3250 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:11 · PVG 20:11 · LAX 04:11 · JFK 07:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.