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

重复代码是万恶之源

  •  
  •   artwalk 2014-12-11 10:18:18 +08:00 6356 次点击
    这是一个创建于 3959 天前的主题,其中的信息可能已经有所发展或是发生改变。
    重复代码是万恶之源

    之前也发过一个帖子问 iOS 有木有检测重复代码的,但好像真木有啊

    所以自己写个了:
    https://github.com/Artwalk/DuplicateLines

    目前很简单,大家有神马想法欢迎留言哈
    25 条回复    2014-12-12 07:04:25 +08:00
    angusjune
        1
    angusjune  
       2014-12-11 12:08:56 +08:00 via iPhone   1
    赞 再来一个Android版的
    tini8
        2
    tini8  
       2014-12-11 12:13:08 +08:00   4
    重用是万恶之首
    bsbgong
        3
    bsbgong  
       2014-12-11 12:15:12 +08:00
    我们的开发原则第一条:DRY, DRY, DRY!
    chmlai
        4
    chmlai  
       2014-12-11 12:22:33 +08:00   1
    结构清晰好像更重要
    q5we66fg
        5
    q5we66fg  
       2014-12-11 12:53:57 +08:00
    @tini8 重用和重复不一样吧,代码应该重用 不应该重复 我觉得
    ytzong
        6
    ytzong  
       2014-12-11 12:58:29 +08:00 via iPhone
    业务第一,代码重复与否不太重要
    tini8
        7
    tini8  
       2014-12-11 13:01:29 +08:00   1
    @q5we66fg 骚年,看来还是项目做的少哇。现实的世界五彩缤纷,根本没法抽象的,所谓封装、抽象、重用这些,都是唬人的。
    tini8
        8
    tini8  
       2014-12-11 13:02:19 +08:00
    除非是造物的上帝,凡人是无法重用现实世界的业务逻辑的。
    artwalk
        9
    artwalk  
    OP
       2014-12-11 13:48:29 +08:00   1
    @angusjune Android 有 PMD,很好用 http://pmd.sourceforge.net/

    @ytzong 重复往往引起业务错误
    afc163
        10
    afc163  
       2014-12-11 13:52:31 +08:00
    @tini8 真理。JRY:just repeat youself
    sohoer
        11
    sohoer  
       2014-12-11 14:08:38 +08:00
    @tini8 看来还是代码写少了
    kingme
        12
    kingme  
       2014-12-11 14:25:45 +08:00
    同一段代码写三遍,基本上就一定会提出来作为新的方法了。。。作为一个C#小菜鸡的做法。。。
    mengzhuo
        13
    mengzhuo  
       2014-12-11 14:36:51 +08:00   2
    给楼上的说JRY的说个生产事故:

    某公司Python程序员,曾经四处复制粘贴一段解析API的代码
    API升级之后,他升级了手头项目的代码,其他的都忘了改
    过了段时间,他自己也忘了
    然后把老的代码复制到了新的项目中……最后加班3天,自己就辞职了
    tini8
        span class="no">14
    tini8  
       2014-12-11 14:44:03 +08:00
    @mengzhuo 解析api、处理字符串,比如字符串截取这些小功能确实能重用,封装成函数或方法。

    可怕的是过度封装,把业务逻辑也封装起来,特别是解决现实需求的业务逻辑,美其名曰重用,最后越陷越深。
    iyangyuan
        15
    iyangyuan  
       2014-12-11 18:29:02 +08:00
    代码之美
    akfish
        16
    akfish  
       2014-12-11 19:05:00 +08:00   4
    楼上喷重用的也是醉了。
    跨项目的重用,水平不够的程序员的确是玩不转。
    同项目内重用就是很基本的要求,这都做不到的应该检讨自己能力是不是出问题了。
    同样的代码段反复出现都不知道提取出来坚持C-c C-v的人,非懒即笨。

    重用的方式是双向的,既可以来自于早期设计,也可以来自于后期重构。
    随着项目演化和业务逻辑的变化改善重用方式是很基本的能力。
    所谓的”过度“重用,不过是开发者水平不到位而已。
    bigzhu
        17
    bigzhu  
       2014-12-11 19:17:07 +08:00
    代码的重用和重复, 这么基本的问题, 竟然还能争论起来.

    遇到到处C-c C-v 的人, 屡教不改, 那么就建议他换行业了, 别祸害 IT 公司了
    est
        18
    est  
       2014-12-11 19:53:44 +08:00
    @tini8 准确的说,是逻辑重用是万恶之首。
    dcty
        19
    dcty  
       2014-12-11 19:57:31 +08:00
    - (void)tableView:(UITableView *)tableView xxxxx
    这种东西在项目重复何止三次,三十次都有。
    fgxtrue
        20
    fgxtrue  
       2014-12-11 20:12:18 +08:00
    代码堆砌
    fangzhzh
        21
    fangzhzh  
       2014-12-11 20:45:07 +08:00
    有人有这样的能力:写出的每一行代码都是垃圾代码
    yuzhouwww
        22
    yuzhouwww  
       2014-12-12 00:01:11 +08:00
    具体来说,是重复的代码片段
    ipconfiger
        23
    ipconfiger  
       2014-12-12 00:32:23 +08:00
    提前优化才是万恶之源
    vjnjc
        24
    vjnjc  
       2014-12-12 00:46:05 +08:00
    有些时候要对重复代码有容忍性,确实很难抽象
    kshatriya
        25
    kshatriya  
       2014-12-12 07:04:25 +08:00 via iPhone
    重复不能只是复制粘贴吧,适当的冗余还是有必要的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     965 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 22:38 PVG 06:38 LAX 15:38 JFK 18:38
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86