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

来请教大家,这种算冗余代码吗?

  •  
  •   joooker · 2020-06-23 11:15:32 +08:00 · 5663 次点击
    这是一个创建于 1617 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <template>
      <div>
        <button @click="tryAgain">点击重试</button>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {};
      },
      mounted() {
        this.unsubscribe();
      },
      methods: {
        unsubscribe() {
          // do something
        },
        tryAgain() {
          this.unsubscribe();
        },
      },
    };
    </script>
    

    类似这么一段 Vue 代码,给同事 review 代码时候我指出tryAgain可以删掉,但他认为很直观没问题。

    我觉得只是单纯再包一层函数直观但没啥意义,更倾向删掉。

    39 条回复    2020-06-24 08:59:41 +08:00
    12tall
        1
    12tall  
       2020-06-23 11:21:53 +08:00
    个人倾向于删掉,后面有需求可以再加上(doge
    chaos1019
        2
    chaos1019  
       2020-06-23 11:22:41 +08:00
    我觉得不算
    oliverchen
        3
    oliverchen  
       2020-06-23 11:44:29 +08:00   ❤️ 2
    很直观没问题。
    “很直观”就是个意义。
    bojackhorseman
        4
    bojackhorseman  
       2020-06-23 11:53:01 +08:00
    如果按钮还要做`unsubscribe()`之外的操作,或许就不冗余了
    mikoshu
        5
    mikoshu  
       2020-06-23 11:53:31 +08:00
    看习惯吧 我个人是会删的...减少代码量哈哈哈
    axeprpr1
        6
    axeprpr1  
       2020-06-23 11:55:13 +08:00
    6
    xiaoming1992
        7
    xiaoming1992  
       2020-06-23 12:10:57 +08:00 via Android
    这样子语义更明晰吧
    wxsm
        8
    wxsm  
       2020-06-23 12:17:00 +08:00
    这叫直观?惊了。

    <button @click="unsubscribe">点击重试</button>
    这才叫直观好吧!
    zackwan95
        9
    zackwan95  
       2020-06-23 12:21:04 +08:00   ❤️ 4
    直观是啥意思?
    看不懂 HTML 里面的那四个“点击重试”四个大字非得用一个 function 名来把它翻译一下么?
    你们团队里有外国人?
    pinkSlime
        10
    pinkSlime  
       2020-06-23 12:48:37 +08:00
    我感觉吧 这种有别人强烈自我风格表达意愿的代码
    如果不是违反你们公司的规范的话 还是不要提的好
    回字的四种写法 没有绝对的是非对错
    而在你的队友看来 你是在否定他的审美
    就好比: 你怎么穿这双鞋 奇丑无比
    没有实质收益还挺容易得罪人 何苦来着
    xingyue
        11
    xingyue  
       2020-06-23 12:53:36 +08:00
    @zackwan95 #9 本来还挺纠结的,被老哥一语点醒,抱拳.jpg

    ps: 如果真要表达“直观”这一层,似乎要这样写:
    <button @click="handleBtnClick('点击重试')">点击重试</button>
    handleBtnClick(type,...args){
    switch(type){
    case '点击重试':
    this.unsubscribe();
    break;
    }
    }

    tryAgain 和 unsubscribe 的语义在同一层,都告诉你具体干什么;而 handleBtnClick 就语义很“直观”,我负责处理点击事件,具体干什么请去函数内找,与前两者不在同一层~
    zjsxwc
        12
    zjsxwc  
       2020-06-23 13:11:59 +08:00
    我倾向于套个娃
    ChanKc
        13
    ChanKc  
       2020-06-23 13:17:53 +08:00 via Android
    倾向于不删
    zhuweiyou
        14
    zhuweiyou  
       2020-06-23 13:27:01 +08:00
    看情况,如果 tryAgain 还要做别的事情,那就有意义。
    bnm965321
        15
    bnm965321  
       2020-06-23 13:41:12 +08:00
    unsubscribe 之后不应该重新 subscribe 吗
    mmlovely
        16
    mmlovely  
       2020-06-23 13:43:49 +08:00
    见仁见智,个人认为没什么问题
    yiyi11
        17
    yiyi11  
       2020-06-23 13:45:01 +08:00 via Android
    但问题是,冗余≠多余,冗余设计为了维护扩展,那是可行的。
    如果真要较真,应该举证,根据业务需求的复杂度,认为绝大部分情况不需要在 tryAgain 中写额外逻辑,即 undescribe 的逻辑足够简单且能表达整个操作的意思,那就不需要该冗余。
    yiyi11
        18
    yiyi11  
       2020-06-23 13:45:54 +08:00 via Android
    上面写错了,是 unsubscribe
    lcs1998
        19
    lcs1998  
       2020-06-23 14:06:24 +08:00
    这个还得看你们之后是不是要在这上面拓展功能了
    Mutoo
        20
    Mutoo  
       2020-06-23 14:29:08 +08:00
    这不只是冗余,还是脱裤子放屁。
    UIXX
        21
    UIXX  
       2020-06-23 14:33:46 +08:00   ❤️ 1
    这是代码风格的问题,只要该程序员写的代码风格一致即可。
    no1xsyzy
        22
    no1xsyzy  
       2020-06-23 14:37:11 +08:00
    @xingyue #11 你这也不对,“我符合处理点击事件” 是 @click 表达的语义。
    我觉得这里的问题是这个组件只用于 unsubscribe ?
    难道不应该外层把 unsubscribe 函数和 “点击重试” 字符串作为 props 传进去吗?
    sonice
        23
    sonice  
       2020-06-23 15:17:44 +08:00
    点击重试和 unsubscribe 有逻辑关系吗?
    如果根据上下文工作流程已经很确定了,重试就一定是 unsubscribe,那去掉没毛病。
    还有其他人有提到的业务扩展的问题。

    review 代码不都是走过场吗?只要功能保证,没有明显的逻辑错误就行,你这样搞是会没“朋友”的
    swirling
        24
    swirling  
       2020-06-23 15:58:42 +08:00
    Verbosity is not a bad thing.
    atwoodSoInterest
        25
    atwoodSoInterest  
       2020-06-23 16:02:11 +08:00
    不冗余
    按钮的显示是“点击重试”,但是实际执行的方法是 unsubscribe,意义其实是不对等的。
    这个调用的意义就在于说明,重试的内容是取消订阅。
    yinjunjian0
        26
    yinjunjian0  
       2020-06-23 16:49:32 +08:00

    按钮的方法名是 tryAgain,看方法名实质不知道重试什么
    换成 unsubscribe 语义更明确
    qwertyzzz
        27
    qwertyzzz  
       2020-06-23 17:20:20 +08:00
    万一 tryagin 里后期还要加别的操作呢 不只是 unsubscribe 呢
    PainAndLove
        28
    PainAndLove  
       2020-06-23 17:36:50 +08:00   ❤️ 1
    如果明天 PM 就给你提个需求让在 tryagain 里多一个操作, 就有意义了。
    简单的说就是赌博。 老梗了。
    cassyfar
        29
    cassyfar  
       2020-06-23 17:44:55 +08:00
    不冗余。unsub 只是 try again 点下去后发生的一步。
    tutou
        30
    tutou  
       2020-06-23 17:48:01 +08:00
    不想删,因为不知道什么时候产品加奇怪的需求
    djs
        31
    djs  
       2020-06-23 18:11:00 +08:00
    没问题吧,加入你这个 tryagain 又要加一堆奇怪的东西,就有用了,逻辑上也分离了
    djs
        32
    djs  
       2020-06-23 18:11:32 +08:00
    听听你同事咋说,如果只是直观,我是觉得删了吧
    GzhiYi
        33
    GzhiYi  
       2020-06-23 18:19:17 +08:00
    是我没法留下来,心里不爽。所以我选删。
    ipwx
        34
    ipwx  
       2020-06-23 18:33:28 +08:00
    tryAgain => handleBtnTryAgain

    我打赌这么重命名楼上的绝对会一致赞同。
    ipwx
        35
    ipwx  
       2020-06-23 18:35:00 +08:00
    或者 tryAgain => onBtnTryAgainClick

    本质上楼主的同事可能觉得 tryAgain 指的就是 tryagain 这个按钮,和 unsubscribe 不在同一层。但是楼主认为 tryAgain 语义上和 unsubscribe 在同一层。这么一种解读差别,所以带来了不同的判断。
    sugars
        36
    sugars  
       2020-06-23 18:58:20 +08:00 via iPhone
    支持语义化,我也这么写
    未来点击按钮要加 loading 什么的就方便了,要想周到长远
    lewinlan
        37
    lewinlan  
       2020-06-23 19:08:29 +08:00 via Android
    我认为冗余。
    代码少的时候看起来好像容易拓展,等代码多了层数多了就变得难以追踪。有好有坏所以优先简洁。
    不过这点小事也没必要较真……
    ShareManT
        38
    ShareManT  
       2020-06-23 21:09:36 +08:00
    没用的代码就得删除
    IvanLi127
        39
    IvanLi127  
       2020-06-24 08:59:41 +08:00 via Android
    取决于你们写不写注释咯,不写的话保留这个方法还是有必要的 emmm
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3153 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:35 · PVG 21:35 · LAX 05:35 · JFK 08:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.